External system integration into automated attribute discovery

ABSTRACT

Methods and apparatus to transform attribute data about assets in a source system data model into attribute data about the same assets in a target system data model. The first step is to extract the necessary attribute data from attribute data collected about inventory assets of a business entity needed to populate the attributes in objects representing those inventory assets in a target system data model. Transformation rules are written which are designed to make all conversions necessary in semantics, units of measure, etc. to transform the source system attribute data into attribute data for the target system which has the proper data format. These transformation rules are executed on a computer on the extracted attribute data and the transformed attribute data is stored in an ER model. In the preferred embodiment, the transformation rules are object-oriented in that transformation rules for subtypes can be inherited from their parent types or classes. An export adapter which is capable of invoking the application programmatic interface of the target system CMDB is then used to export the transformed attribute data stored in the ER model to the target system CMDB. A heuristic method to create self-consistent data blocks without exceeding a maximum size limit involves loading instances of entity types and all related instances in the order of decreasing connectivity metric.

BACKGROUND OF THE INVENTION

It is useful for companies to know exactly what assets they have formany different reasons, but it is difficult to know this for largecompanies and governmental entities. Manually collecting such data on aperiodic basis is expensive and time consuming. Systems have beendeveloped by companies such as BDNA of Mountain View, Calif. to takeautomated inventory of assets. IBM Tivoli is another such system.

Sometimes, customers have IBM or BMC CMDB structured databases (the IBMTivoli Change and Configuration Management Database or CMDB) of theirassets and the attributes thereof but the customer likes the wayautomated inventory collection of attribute data about a company'sassets is collected by another system such as the BDNA automatedinventory software provided by BDNA in Mountain View, Calif. The BDNAsoftware stores the attribute data in a different format and withdifferent semantics than other systems like IBM CMDB. Sometimes in suchsituations, the customer may wish to continue to use the IBM CMDB datamodel but use BDNA software to collect the attribute data about thecustomer's assets. In such cases, it is useful to be able to extractautomatically collected asset attribute data from BDNA data repositoriesand be able to make that data available on other data repositories suchas those provided in asset management systems or inventory systemsdeveloped by IBM and BMC. A system to map from one data model to anotherand make all changes in semantics, data types, class structure,inheritance relationships, etc. is needed to do this.

The IBM Tivoli CMDB has configuration and tracking functionality thatdoes automated, agentless discovery of the assets in use by an entityand their configuration and application dependencies. The itemsdiscovered are called Configuration Items or CIs for short. Wikipediadefines a Configuration Item as “a collection of objects related to thespecific functionality of a largest system.” Discovery information abouta system is one aspect of a CI, but there is usually other informationabout each CI maintained in its CMDB. For example, Number of troubletickets an administrator has logged against a computer system; originalset of applications installed on it; and, how they were configured.Discovery data is used to reconcile/enforce known data about a CIagainst item. For example, the discovery data may include: Current listof applications found in the system; or, up times collected about thesystem.

-   -   Another source defines a Configuration Item as:    -   “ . . . any component of an information technology        infrastructure that is under the control of configuration        management. Configuration Items (CIs) can be individually        managed and versioned [sic], and they are usually treated as        self-contained units for the purposes of identification and        change control.    -   All configuration items (CIs) are uniquely identified by names,        version numbers, and other attributes. Cis vary in complexity,        size and type. They can range from an entire service which may        consist of hardware, software and documentation, to a single        program module or a minor hardware component.”

It is useful to be able to transform inventory attribute data discoveredby other automated inventory discovery systems such as the one providedby the assignee of the present invention, BDNA, into the IBM Tivoli CMDBdata model, for the reasons given above. In such cases, it makes senseto provide a layer of isolation and mapping between the BDNA internaldata structures and the outside system and only expose through the layerthe necessary models and data of the BDNA system. This intermediarylayer allows the BDNA system and data structures to continue to evolvewithout impacting the use of BDNA data in external systems.

The framework and functionality of the intermediate layer:

1) provides a layer of isolation between the BDNA internal data modeland what is exposed to outside sources;

2) map out and helps solve differences between the BDNA data model forthe discovery data and the data model representation of an outsidesource or target system;

3) provide runtime support for processing BDNA 's discovery data intonormalized data required by the external system in the form of a javacode snippet.

4) provide a consistent, scalable and manageable way of processing theBDNA model and extracting it to an outside target.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is one page of a multipage data model diagram illustrating someof the Configuration Items in the IBM CMDB data model.

FIG. 2 is a diagram of showing how attribute mapping rules are used tomap discovered element data to Configuration Items in a CMDB datastructure in an m-to-n mapping.

FIG. 3 is a block diagram showing the overall architecture of a systemto transform inventory data gathered by an automated inventory attributegathering system into data structures suitable for use in IBM CMDB andBMC CMDB systems.

FIG. 4 is a diagram of the schema or data structure needed to do thetype of transformations which the system of FIG. 3 performs.

FIG. 5 is a diagram of a supported object model comprising ER ModelTable Types.

FIG. 6 is a diagram illustrating the hardware and data flows of a systemto transform BDNA asset attribute data into a destination ER model andexport the transformed attribute data into an external system data storesuch as IBM CMDB.

FIG. 7 is a flow diagram of the workflow of a process to create the BQLreports and transformation rules for a specific transformation projectand use them to transform BDNA inventory asset attribute data into CIsin the data model of a CMDB data structure.

FIG. 8 is a block diagram of the IBM ER Model.

FIG. 9 is flow diagram of the business method for transformation ofattribute data from the data model of the source system to the datamodel of the target system.

FIG. 10 illustrates a class diagram for the object-orientedtransformation rules objects for storage of the Transformation Rules ofthe ComputerSystem CI with two subtypes illustrated.

FIG. 11 is a diagram illustrating how the object oriented transformationrules can combine-transform information from two or more objects in theinventory attribute data extracted by the BQL report from the sourcesystem to write a single CI in the target system or split-transforminformation from a single object extracted by the BQL report from thesource system into two or more Cis in the target system.

FIG. 12 is a diagram illustrating how BQL reports are used to splitaggregated computer system and operating system attribute data intoseparate BQL reports, one for computer systems and one for operatingsystems, and one for the relationships between computer systems andoperating systems.

FIG. 13 is an illustration of the overall workflow of another embodimentof a transformation process represented by the flowchart of FIG. 7.

FIG. 14 is a flow diagram showing how data from two different elementsdiscovered by the automated attribute discovery process is combinedusing a BQL report into a single Configuration Item in CMDB for theOracle database instance.

FIG. 15 is an illustration of two elements linked together by acontainment relationship in the discovery data.

FIG. 16 is a flow diagram showing how BQL reports can also be used tosplit a single BDNA report into two tables and a relation expected byCMDB.

FIG. 17 is an example of the adapter restart.

FIG. 18 is a flow diagram of a BDNA adapter doing a state-basedtransfer.

FIG. 19 shows two hierarchies of objects, one rooted at A and one rootedat P.

FIG. 20 represents the process of exporting the data from the BDNA CMDBER Model using the CMDB specific adapters to external CMDB stores.

FIG. 21 is a flow diagram of one method of dividing a graph of entities(asset classes) into separate groups where no entity in any group isrelated to any other entity in any other group.

FIG. 22 shows an example graph of the entity types for the output datagenerated by the transformation process described above. The relationsbetween entity types (tables) are indicated by arrows. An arrow from oneentity to another indicates the origination point is the parent entityand the destination point is the child entity.

FIG. 23 shows the cardinality of each relationship added to the examplegraph shown in FIG. 22.

FIG. 24 shows an example of relationship between two entity tables. ThisIllustration only shows the metadata. In this simple output schema, twooutput entity tables A and B and a relationship table showing therelationship between A and B are shown.

FIG. 25 shows example data in the tables shown in the relation examplegiven in FIG. 24.

FIG. 26 shows examples of self-consistent blocks that load data to thetarget CMDB system. A single block containing all the data in theindividual blocks illustrated would be too large to load into the CMDBsystem.

FIG. 27 shows the connectivity metric of each entity type added to thegraph shown in FIG. 23.

FIG. 28 illustrates how to divide a graph consisting of 9 nodes A, B, C,D, E, F, G, H and I into three groups G1, G2 and G3 using the preferredalgorithm disclosed herein. Note there is no edge between any two nodesthat belong to two different groups.

FIG. 29 shows an example illustrating how an approach that processesnodes of the graph in a random order may lead to inefficiency ofexecution.

FIG. 30, comprised of FIGS. 30A and 30B, referred to collectively asFIG. 30, is a flowchart of the preferred heuristic based method to buildself-consistent blocks of entities once a graph is divided into groupsby any prior art method.

FIG. 31 is a flowchart of another example of a process to divide a graphof entity types into independent groups where no entity type in a groupis related to another entity type in another group.

FIG. 32 is a flowchart of the details of the process of adding the dataof all related entity instances to a data block being filled.

FIG. 33 is a diagram illustrating one example of relationships ofinstances of particular entity types.

SUMMARY OF THE INVENTION

Embodiments that implement the teachings of the invention will domapping from one data model to another. This is done using:

1) Means for extracting the necessary attribute data from the sourcesystem to represent the same assets having those attributes in thetarget system. In various embodiments, this is done using BQL reports orany other method of selecting the attribute data about one or moreassets in the source system needed to make up instances in one or moreclasses representing the same type assets in the target system.Typically, this is done using a computer programmed to run BQL reports,but dedicated hardware circuits could also be used.

2) Means for transforming the attribute data from the format it is infor the data model of the source system to the format of the data modelfor the target system. In the preferred embodiment, this is done using atransformation engine which executes transformation rules. These rulesare written by hand by an analyst who understands the difference betweenthe source system data model and the target system data model and thenwrites computer programs that control a computer to transform theattribute data from the source system into attribute data having theproper format for the target system. The transformed attribute data isthen stored temporarily in an ER model of the target system.

3) Means for exporting the transformed attribute data to the targetsystem. In the preferred embodiment, this is implemented with an exportadapter that is conversant with the application programmatic interfaceof the target system and which functions to make the appropriatefunction calls and supply the appropriate arguments from the ER modeldata to properly store the ER model data in the target system. Theexport adapters are basically drivers for the target system.

The BQL reports are generated by software running on a computer whichcontrols the computer to select the attribute data needed from thesource system to make up each Configuration Item (CI or class or type)in the target system. The BQL reports are typically computer programswhich control a computer to extract the source system attribute data andstore it in a store coupled to the transformation engine. Atransformation engine is typically implemented by executingtransformation rules programs on a computer. The transformation rulesare written by an analyst that understand the differences in semanics,data types and units of measure between the source system and the targetsystem. The export adapters are typically software programs which areexecuted on a computer, the software controlling the computer beingconversant with the application programmatic interface (API) of thetarget system and controlling the computer to export the transformedattribute data into the target system.

In the preferred embodiment, the transformation rules are organized inan object oriented format. What this means is that since the objects inthe target system data model are organized into parent and subtypeobjects, i.e., CI and subtype Cis, the transformation rules can beso-organized also. The preferred embodiment method involves identifyingfor each CI with subtype CIs in the target system which attributes arecommon in that all the subtype CIs inherit those attributes from theparent CI. Transformation rules for those common attributes are thenwritten and stored in an object which is the parent of subtype objects.The subtype objects store transformation rules which are unique to thesubtype objects attributes stored in the subtype objects in the targetsystem data model.

When the attributes of a subtype object in the target system data modelare to be populated, the transformation rules of the parent object areused to transform the attribute data of the corresponding parent objectin the source system data model into the data format of the targetsystem data model's parent object. The transformed attribute data thatis common to parent object (CI) is then exported to the target systemdata model and used to populate the parent object (CI) and the inheritedattributes of all the subtype or child objects (subtype CIs). Thetransformation rules for the attributes which are unique to each subtypeobject (subtype CI) are then used to transform the attribute data of thesubtype objects in the source data system into the data format ofattribute data of the subtype objects in the target data system. Thetransformed attribute data for each subtype object is then exported intothe appropriate subtype objects of the target system.

DETAILED DESCRIPTION OF THE VARIOUS EMBODIMENTS

The process of exporting inventory attribute data developed by systemssuch as those marketed by BDNA (hereafter BDNA discovered data) into thedata bases or data structures of other system fundamentally involves amapping process to resolve differences between the data structure (datamodel) of the BDNA discovered data and the data structure or data modelof a target system.

FIG. 1 is one page of a multipage data model diagram illustrating someof the Configuration Items in the IBM CMDB data model. This is aconceptual model only in the form of a class diagram and is not how thedata is actually stored in their database. A CMDB is a common storewhere all the information about the IT assets of an entity are stored,and it has a data structure or data model which is independent of thedata structure of discovery data discovered by discovery tools such asthe BDNA discovery tool. A data model is a class diagram which definesthe classes of objects, each object's attributes and genus-speciesrelationships, i.e., the subtypes or species of each genus or type(class) of object and the containment relationships. A containmentrelationship is a relationship such as an operating system is installedon a computer. A genus species relationship is, for example, computersystem is the genus and Sun Sparc station is a species of computersystem. A database is an implementation of a data model like FIG. 1 withspecific tables. The characteristics that define a data model are theclass structure and the relationships between the classes. The names andattributes of each class and its subtypes and the attributes specific tothe subtype are defined and which classes are subtypes of other classesis defined as is the relationship of which classes of asset types areinstalled on other classes of asset types is also defined. How theinstances of devices within the class structure are stored is irrelevantto the data model itself.

Vendors that define CMDB data models like IBM generally market discoverytools which configure the discovered attribute data about assets in away compatible with that vendor's CMDB. But sometimes, customers want touse other discovery tools that are not configured to generate discoverydata in a data format compatible with a CMDB data model the customerwishes to use. In such a case, a transformation system to convert thediscovery data into the data structured used in the CMDB is useful.

Each block in FIG. 1 represents a Configuration Item or CI in the datamodel. A CI is a type of an asset such as a computer or an operatingsystem, etc. A CI is basically a class object with a listing ofattributes. For example, there is a CI 11 for ComputerSystem which hasthe attributes listed in the box 11 such as architecture, CPU speed, CPUtype, manufacturer, memory size, ROM version, serial number, etc. Thedata model diagram shows a classic object-oriented class structure wherevarious CI types have subtypes which inherit the attributes of theparent class but which unique attributes of their own. For example, theComputerSystem CI 11 has the various subtypes named in the blocks suchas blocks 13 and 15 representing subtypes of computer systems forSunSPARCVirtualComputerSystem and ZSeriesComputerSystem, respectively.Each of these is a separate species of the generic ComputerSystem type.The lines with arrowheads, such as line 17, indicate these type andsubtype relationships. The CI box on the arrowhead end of line 17represents the genus CI or the common attributes that all the subtype CIboxes (on the “feathers” end of the arrow) will inherit. Each of thesubtype CI will have all the attributes of the parent type and may haveits own “species” attributes unique to it. These particular subtypesrepresent the leaf level of the class diagram tree, and those types ofobjects will be instantiated with instances of particular assets foundin inventory which have the attribute set of that type and subtype. Someof the Cis or types are abstract such as the LogicalElement CI 23 at thetop of FIG. 1. This CI type will never be instantiated with actualinstances but it serves as the top of the class diagram tree and isgeneric to all the subtypes.

The containment relationships in the data model of FIG. 1 arerepresented by lines connecting the CI boxes, of which lines 19 and 21are examples. Line 19 indicates that the ComputerSystem CI 11 is theparent of OperatingSystem CI 9 and is also the parent of FileSystem CI23. These lines 19 and 21, and the cardinalities printed on them, meanthat the computer system may have any number of operating systemsinstalled on it and any number of file systems installed on it.

In order to transform attribute data collected by an automated discoverysystem such as BDNA to data stored in a CMDB, it is necessary to gatherall the attributes needed for each CI and transform that data ifnecessary to conform it to the data types of the attributes of the CIs.This may require unit conversion, data type conversion and recognitionof semantic differences so that attributes called one thing in thesource data are stored in an attribute storage memory location calledsomething else in the target system but which means the same thing. Forexample, a CI for a computer system may have an attribute that measuresthe size of the hard disk in megabytes but the automated asset discoverysystem stores such an attribute in units of kilobytes. As anotherexample, the BDNA automated asset discovery system may store theattribute CPU speed as a floating point number such as 126.4 MHz and thetarget system may store the CPU speed as an integer number of MHz. Asanother example a CI in the target system may label the CPU speedattribute “CPUSpeed” whereas the BDNA software may label the sameattribute “ClockSpeed”. They both mean the same thing and are the sameattribute.

FIG. 2 is diagram of showing how attribute mapping rules are used to mapdiscovered element data to Configuration Items (CIs) in a CMDB datastructure in an m-to-n mapping. In FIG. 2, BDNA discovered data in theform of three different discovered elements E1, E2 and E3 are input to aprocess 10 which uses mapping rules to create data structures of thedesired output type. The elements E1, E2 and E3 could be hardware assetsor software assets or any other assets on the network of the entityusing the BDNA discovery software. These elements may have differentnames than the CIs to which they are to be transformed and the listingof attributes of the elements may be different than the CI target, butbasically, they are the same thing as the target CI or Cis into whichthe element's attribute data are to be transformed. In the particularexample of FIG. 2, the target system is a CMDB data structure, but IBMTivoli or other data structures might also be target systems. Sometimes,the attributes of multiple elements are needed to make up a letternumber of CIs. That is the purpose of the M-to-N mapping shown in theexample of FIG. 2 where the attributes of three elements are transformedinto the attributes of two CIs CI1 and CI2.

One example of how to do such a conversion is:

1) Use the BVL/BQL functionality of BDNA software to combine multiplediscovered elements to a single entity.

a) This done by collecting all attributes needed to create a particularConfiguration Item type in CMDB in a BQL report (BQL stands for BDNAQuery Language) which is then used as an input of data to an attributemapping process.

For example, a ComputerSystem CI type in CMDB may require attribute datafrom Network, Host and Operating system discovered elements, as relatedtogether by the container relationship in BDNA data structures ofdiscovered elements. Several such BQL reports may have to be defineddepending upon how many different Configuration Item types are to begenerated. FIG. 14 is a flow diagram showing how data from two differentelements discovered by the automated attribute discovery process iscombined using a BQL report into a single Configuration Item in CMDB forthe Oracle database instance. The Configuration Item in the CMDB to bebuilt is box 27 and is a CI for an Oracle database. It requiresinformation both about the operating system of the host and the OracleDatabase instance. The attribute data about the operating system isrepresented by block 29. The attribute data about the Oracle DatabaseInstance is represented by block 31. A BQL report 33 is generated whichcontains the database attributes and adds the hostname attributes aboutthe operating system element 29.

FIG. 16 is a flow diagram showing how BQL reports can also be used tosplit a single BDNA report into two tables and a relation expected byCMDB. In this example, the BDNA OS report 37 contains both the IPaddress and the MAC address but CMDB expects two tables and a relation.The BQL report 41 is used to generate a CMDB OS report containing theOSid which has a relation InstalledOn with a CMDB MAC report MACAddrid(the MAC address) which is bound to a CMDB IP report which contains theIP address. The BQL report generates the two separate CMDB reports andenforces proper contraints.

When the BDNA discovery software discovers attribute data, the valuesare stored in a special schema called the transactional store that isvery generic and suitable for inserting/appending new data but notsuitable for querying data (or interpreting data in a meaningful way). Alanguage called BQL was therefore developed to generate reports that areeasy to interpret from the transactional store. These reports havemeaningful column names that reflect the attributes being discovered.Each report ends up stored in a database table.

BQL is this query language prior art reporting mechanism that isexecutable and which extracts attribute data and stores it in one place.The BQL reports allow attribute data from different inventory assets tobe collected and stored in one place such as a particular row of atable. In the transformation process described here, the BQL reports areused to collect all the attribute data needed for a particular CI fromthe attribute data of one or more assets in the inventory data and storeit in one place for the transformation rules to work on. That one placeis represented as box 7 of FIG. 3, labeled the input schema based on BQLreports. An alternative would be to use specialized SQL statements togenerate such tables.

b) Relationships between entities will, in some embodiments, bespecified by reports. For example, the relationships betweenComputerSystems and Databases (parent-child) may be specified as:

-   -   i.) an M-to-N relationship: a separate report that just contains        the parent-child link;    -   ii.) an 1-to-N relationship: The database reportwill, in some        embodiments, contain a column for OS_ID (which is sort of a        foreign key to an all_os table) FIG. 15 is an illustration of        two elements linked together by a containment relationship in        the discovery data. In this case, a relationship between the        Operating System report 33 and the Database Report 35 is a        containment relationship. The os_id attribute is the common        attribute which links the two reports together in the sense that        it is a foreign key to the All_OS Report 33 and it contains the        ID of the OS that contains the database.

c) Use entity transformation rules to map a single entity to possiblymultiple CIs. In some embodiments, the BVL/BQL language may be able toimplement these transformations since BQL supports user defined PL/SQLfunctions.

FIG. 3 is a block diagram of the overall architecture of a system toconvert data from a BDNA inventory data repository into records indatabase entries in the data format of IBM CMDB or BMC CMDB.

Block 12 represents a set of specific BQL queries which are specific tothe project's source and target data models. The BQL reports are a setof reports necessary to transform m-to-n mapping of BDNA types into1-to-n mapping of BQL reports. A BQL report is a a database table wherethe main idea is to store all the required information for a CI in onetable no matter how the attribute data was discovered. For example, atdiscovery time, discovery data may have been stored as several differentelements. BQL reports contain data extracted from the BDNA inventorydata to make up a complete specific CI in the CMDB data structure. Anexample of part of the All Operating System report (only five out of alarge number of OS attributes are displayed) is given in the BQL reporttable below

OPERATINGSYSTEM_id, OPERATINGSYSTEM_LABEL, SERIALNUMBER, TOTALMEMORY,VERSION 102122068 osiris.bdnacorp.com B0ZJP81 294000640 5.2.3790102122080 qawinl.bdnacorp.com 1MN3081 4294000640 5.2.3790 102122090hydra.bdnacorp.com 804757504 5.2.3790 102122096 xseries3.bdnacorp.com00:14:5E:7E:2B:F2 4249919488 Red Hat Enterprise 4 102122098xseries4.bdnacorp.com 00:14:5E:7E:2B:EE 4249899008 Red Hat Enterprise 4102122102 titan.bdnacorp.com 00:02:B3:95:73:95 3189473280 Red HatEnterprise 4 102122104 avocado.bdnacorp.com 00:14:22:09:30:E2 2124529664Red Hat Enterprise 4

An example of the Database Report for the Oracle database instance isincluded below.

ORACLEINSTANCE_ID, ORACLEINSTANCE_LABEL, ORACLEINSTANCE_TYPE,NUMSESSIONS, 102129509 ora92 Oracle Instance on UNIX 2 102129483 ora10gOracle Instance on UNIX 21 102129472 ora10g Oracle Instance on UNIX 10102129461 ora92 Oracle Instance on UNIX 26 102129444 ora10g OracleInstance on UNIX 32 102129433 ora92 Oracle Instance on UNIX 1 102129416ora92 Oracle Instance on UNIX 1 102133888 ORCL Oracle Instance onWindows ORACLEINSTANCE_ID, EDITION, SCHEMACOUNT, OPERATINGSYSTEM_ID102129509 Standard 39 102122173 102129483 Enterprise 28 102122146102129472 Standard 9 102122144 102129461 Standard 9 102122136 102129444Enterprise 9 102122134 102129433 Standard 5 102122132 102129416 Standard4 102122130 102133888 0 102123967

Note that all columns of the database report are related to databaseinstances except for the last column Operating System ID that is theforeign key to the containing operating system (the column headings aretoo long to fit the page so they wrapped around).

These BQL Reports contain the data required to make up CIs of a specificCI type in the CMDB data structure.

Block 14 represents the data repository of automatically discoveredinventory data regarding the attributes of the devices and softwarediscovered in the discovery process. This data repository 14 is thesource of the inventory data which is being transformed. Block 16represents the entity transformation rules which are used to transformdata entities from BDNA data format to CMDB format. The rules are vendorspecific since each vendor has a different data schema (data structure).In other words, the transformation rules to transform BDNA data entitiesinto CIs for IBM CMDB data structures will be different thantransformation rules to transform BDNA data entities into BMC CMDB datastructures. These rules would be different than transformation rules totransform IBM CMDB CIs into BDNA elements in the base tables created bythe BDNA system.

All the mapping/transformation rules to transform attributes from theinput schema to whatever is the output data schema are specified inblock 16. There is one transformation rule for each CI type. Eachtransformation rule is handwritten by an analyst who understands thedifferences between the data structure of the CI in the target datamodel and the data structures of the elements and attribute data in theinventory data stored in the source system (which may be automaticallydiscovered or stored in the source system base tables or data repositoryby hand). The transformation rules make the necessary data unitsconversion, data type conversion and semantic translation in the senseof placing the processed data in the appropriate field or fields of thetarget data model's data structure despite the fact that the data iscalled something else in the source data structure.

Block 18 represents the entity transformation engine. The entitytransformation engine is a program running on a computer which receivesall the input data from the inventory data repository in data format 1(the BDNA inventory data or whatever other input data format is beingused). That inventory data is transformed by the entity transformationengine using the entity transformation rules specified in block 16 asthe other input. A specific example of a transformation rule process isgiven below.

Example of Transformation Rule

-   -   1) The discovery process assigns a value of device type to a        Computer System to have a specific format (e.g.,        device.loadBalancer, device.storage etc.). Different CMDB        vendors have different formats for storing such an attribute.        Here is a snippet of a transformation rule that converts the        value of this particular attribute.

 <xsiTargetAttributeComputed name=“csType”>   <xsiAttributeAliasname=“deviceType” sourceAttributeName=“deviceType”/>   <xsiCode>   <![CDATA[     if (deviceType.equals(“device.loadBalancer”)) return“LoadBalancer”;     else if (deviceType.equals(“device.storage”)) return“StorageDevice”;     else if (deviceType.equals(“device.system ”))return “ComputerSystem”;     else if(deviceType.equals(“device.storage.SAN.StorageArray”)) return “SANStorage Device”;     else if(deviceType.equals(“device.storage.SAN.StorageArray”)) return “SANStorage Device”;     ...    ]]>   </xsiCode> </xsiTargetAttributeComputed>

-   -   2) The discovery system finds the total physical memory of a        Compute System in Bytes. The CMDB system requires the attribute        values to be in Kilo Bytes. Here is a snippet of the        transformation rule that does the conversion:

<xsiTargetAttributeComputed name=“TotalPhysicalMemory”> <xsiAttributeAlias name=“memory”  sourceAttributeName=“totalmemory”/> <xsiCode>   <![CDATA[  //bytes to kbytes  if (memory == null) {  return null;  }  return memory / 1024;   ]]>  </xsiCode></xsiTargetAttributeComputed>

-   -   3) Simple name transformation: The discovery system calls an        attribute representing the Operating System domain as        oscomputerdomain but the CMDB system requires the attribute name        to be WorkGroup. The following transformation rule snippet does        the name conversion.        <xsiTargetAttributeMapped name=“Workgroup”        sourceAttributeName=“oscomputerdomain”/>    -   4) The CMDB system requires an attribute called URI (Uniform        Resource Identifier). For example the user directory/home/joe on        the machine joe.bdnacorp.com has a URI represented in the given        format: file://joe.bdnacorp.com//home/joe. The discovery process        never computes the URI attribute. Instead a discovered element        of type root types resource software. OperatingSystem has the        hostName attribute whereas a related discovered element of type        root types resource.storageAllocation.fileSystem has a        PhysicalName attribute with value/home/joe. The discovery        process finds the elements with the corresponding values and        also stores a relation between the two elements since they are        related (by a containment relationship—since the fileSystem        element is contained in the OpertingSystem element), stores the        relation information in the database. A BQL report is built to        bring the two attributes (for each such discovered instance)        together. Such a report may be contain several other attributes        such as fileSize, fileFormat etc. A transformation rule to build        the URI attribute takes the above two attributes (hostName and        PhysicalName) as input and computes the URI attribute. The        relevant snippet of a transformation rule that builds the URI        attribute is as follows:

<xsiTargetAttributeComputed name=“URI”>  <xsiAttributeAliasname=“realFile”  sourceAttributeName=“PhysicalName”/> <xsiAttributeAlias name=“host” sourceAttributeName=“hostName”/> <xsiCode>   <![CDATA[    return “file://”+host+“/”+realFile;   ]]> </xsiCode>     </xsiTargetAttributeComputed>

In the specific example of FIG. 3, the input data in BDNA data format ispulled from data repository 14 and the transformation rules specific toa BDNA to IBM CMDB data format transformation are applied to convert theinput data into data in a CMDB ER Model which has data structurescompatible with Configuration Items for the destination CMDB.

Block 20 represents the output schema CIs in the example given of thetarget data format being the CMDB ER Model or output data entities inwhatever the target data format is. The ER model is a data model whichis a staging area where the attribute data is temporarily stored whichhas been transformed by operation of the transformation rules engine tothe data format required by the target data model. This temporarilystored data awaits export by the export adapter 56. FIG. 8 is a blockdiagram of the data structure of the IBM ER Model. Each box in FIG. 8 isa table, and the list of attributes in the box is a listing of the namesof the columns in the table. In other words, each attribute name listedin the box is the name of one column in the table having the name listedin the box. The IBM ER model is compatible with the data structure ofthe IBM CMDB data model so the data structure which implements the IBMCMDB data model would comprise tables for each CI type. Each table wouldhave one column for each attribute and the rows in the column would bepopulated with the values of the attribute represented by the columns ofattributes for instances of that type asset found in the BDNA inventorydata base tables. For example, a particular laser printer may have onlyfour attributes: manufacturer, model, serial number and IP address. Theprinter CI in the IBM CMDB would have subtype tables for differentsubtypes such as laser, inkjet, etc. In the data structure that storesthe data of the IBM CMDB data model, the laser printer subtype tablewould have one row dedicated to the laser printed mentioned above. Itwould have four columns labelled manufacturer, model, serial number andIP address, and each column position on the row dedicated to theparticular printer would be populated by the attribute value, e.g. HP,801, HP2013458769, 10.10.10.1. Thus, the tables in FIG. 8 wouldbasically be transferred to the data structure of the external systemrepresenting the IBM CMDB data model. Most of the instances would berecorded in tables for the subtypes, but any instance which could not beclassified in one of the subtypes would be stored in a table forinstances of the parent type CI.

Block 22 represents adapter interface mechanisms to process BDNA data ina well defined, consistent, restartable and high performance manner. Theadapter interface 22 performs the following functions:

1) defining BDNA data to be exported [I thought the data to be exportedwas defined by the BQL reports];

2) uniquely identifying entities and relations within a project;

3) providing a dynamic, pluggable interface for external adapters;

4) keeping track of the progress of the exporting process and allowingrestarts;

A restart is the process of partially redoing a transfer of informationbetween BDNA and and external CMDB. Restart might be necessary becausedoing the transfer can take a long time and the process might stop inthe middle because of unforseen events such as the network or databasefailing or running out of disk space. In a restart case, the BDNAtransformation engine allow the adapter to continue/restart from thelast committed transaction instead of having to start the export processfrom the beginning all over again. FIG. 17 is an example of the adapterrestart.

5) providing common mechanisms to log errors and warning conditions.

Errors and warning conditions can occur during any step of thetransformation. They can indicate a problem with the project definition,a problem with the BDNA data set exported, or that the transformationprocess encountered an out of resource condition. Examples of projectdefinition problems: “Invalid rule definition”, “rule reference missingrule definition” or “Invalid BQL report name”. Examples of BDNA data setproblems: “Foreign key constraint violation on relation installedOn”.Examples of out of resource conditions: “Unable to reach BDNA database”,“User tablespace full on BDNA database”, “File system out of disk spacewhile adapter output xml book”.

6) divide up the data to be exported so that it can be processed inreasonable sizes.

The adapters 22 are software which drive Adapter Interface circuitrythat is coupled to one or more data repositories 24 and 26 where theConfiguration Items are stored. In this example, the Cis are stored inan IBM CMDB data schema and a BMC CMDB data schema. The mechanism tostore data in an IBM CMDB is very different than the mechanism to storedata in a BMC CMDB. Each of the IBM CMDB and the BMC CMDB will have itsown adapter interface circuitry which is designed to follow theappropriate procedures to stored data in the target CMDB for which theadapter is designed. Basically, each export adapter is a driver for aspecific CMDB which takes data tables out of the ER model for the targetCMDB and invokes the proper procedures to store the data in the targetCMDB in the appropriate place and the appropriate fashion. For example,for the IBM CMDB, the export data has to be put in XML book format andthen exported. For a BMC CMDB, the export adapter is a JVC connectorwhich connects the ER model to the data store where the BMC CMDB isbeing stored. The export adapter for each target CMDB knows the API forthat target in that it knows what function calls to make and whicharguments to supply for each function call.

Target data repositories 24 and 26 are databases in memory arrays whichstore the IBM and BMC format data structures. It is these datastructures to which the ER model data is transferred by the exportadapters.

Modes of Data Transfer

There are two modes of data transfer from the automated asset discoverysystems to the CMDB data structures.

1. Stateless Transfer: this type transfer assumes all the data collectedby the automated asset discovery system is assumed to be new. The resultis that the system attempts to create every CI defined by the IBM CMDB.Stateless vs. State Based transfers deals with what happens wheninformation about the same CI is added to or removed from the CMDB butwith different data collected multiple times. A stateless transfer fromBDNA to CMDB means only insert operations are done into the target CMDBwithout trying to find out if that particular CI already exists. A statebased transfer requires the BDNA adapter to query the target CMDB tofind affected CIs and either do an insert, update, or delete dependingon the state of the remote CI. It is up to the CMDB ReconciliationEngine to resolve for each CI the system attempts to create if the CIalready exists in the CMDB (based upon the NamingRules). Areconciliation engine is part of the target CMDB. It uses unique namingrules on the CMDB system to keep unique copies of each CI. Naming rulesare mechanisms for unique identifying of CIs. A computer system might beidentified by a combination of its domain name “foo.bdnacorp.com”, andits active IP addresses: {192.168.1.160, 10.10.10.1}. They are used whentrying to find if a particular CI already exists in the target CMDBsystem when doing state based transfers. This is approach can beimplemented without having a CMDB Driver component. [what is the CMDBdriver component in the block diagram?]

2. State Based Transfer: in this type of transfer, data that waspreviously exported is cached. The cached data is used to compute thedifferences (the delta) between the cached data and the new data. Basedupon these differences, instructions are generated such as create,modify, delete, etc. Assuming most of the data does not change, the timeto process the differences will be small. A CMDB driver implements thestate based transfer. FIG. 18 is a flow diagram of a BDNA adapter doinga state-based transfer. State based transfers are more complicatedbecause it must match BDNA data with state of target CMDB.

FIG. 3 is a diagram of the schema or data structure needed to do thetype of transformations which the system of FIG. 2 performs. TheXSI_Project table 30 is a table which contains definitions of a projectobject specifying rules reference, input entities references, outputentities references, relations between output references, and adapterconfiguration. The adapter configuration is any specific informationrequried by the adapter to run. For example, a specific Vendor's adaptermay need specific connection properties or some such detail to run. Suchvendor specific adapter details are provided as adapter configuration.

Xsi_xform_rule_ref 32 is a table containing definition of transformationrule references used by the project. Each row of this table identifies asingle transformation rule. Rules can operate on CI's or relationshipsbetween CI's Both CI's or relations have unique entity ID's. Each ruleidentifies its entity source and entity target. An xsi_entity_source orsxi_entity_target is the unique ID associated with either a relation orCI.

Xsi_adapter 34 is a table which defines the output adapter and itsassociated entity and relation outputs. The xsi_adapter andxsi_adapter_output tables define information used by the transformationengine to configure, find the subset of the model used by the adapter,and run the adapter when a user requests a transformation. Each projectcan define an adapter in the xsi_adapter table with information to loadthe adapter and which configuration it should use for this particularproject. The xsi_adapter_output table defines which CI's and relationsare part of this project and should be sent to the adapter when thetransformation is executed. These references are needed because projectscan share entities and relations. For example, the BMC adapter projecthas CI tables: T1, T2, T3, and the IBM adapter project has CI tables T2,T3, T4.

In this example the BDNA External tables would create T1,T2,T3,T4, butthe BMC adapter would only use the first three tables while IBM'sadapter would only output the last three. Given a particular tablerepresenting a CI, not all of its columns need to be exported to thetarget CMBD. Some of the invisible columns might only be used whileprocessing the transformation rules and are not used when exporting tothe target CMDB.

Xsi_adapter_output 36 is a table which contains information about theset of entity and relations output to be read by the adapter

Xsi_base_type_ref 38 is a table which defines identities, entities andrelations used by a project. An entity is a table that is part of ERmodel defined and built with BQL. Each defined CI and the definedrelationships between CI's form a CMDB specific ER Model. The BDNAtransformation engine represents each CI as a table with a unique ID foreach CI instance, and a column corresponding to each CI's attribute.Relations betweens CI's are also implemented as a table with two columnssourceId, targetId. This generic implementation of the ER Model can bereused for multiple CMDB specific ER Models. It loosely corresponds to aparticular type in the ER model. A relation associates two families oftype: a source type and a target type. We only need to define a relationbetween base types, and it also applies to all subtypes of each CI. Forexample the relation “OperatingSystem runningOn ComputerSystem” is theonly one needed to accommodate the instances “Windows1 runningOn CS1”,“Linux2 runningOn CS2”, “Solaris3 runningOn CS3”.

The need for Identity table results from the fact that the output datamodel that we what to populate is Object Oriented. The ability to haveseveral subtypes of a base type requires us to store the subtype dataseparate from each other. But consider two such hierarchies shown inFIG. 19. FIG. 19 shows two hierarchies of objects, one rooted at A andone rooted at P. Trying to specify relations between objects ofhierarchy rooted at A with objects of hierarchy rooted at P becomesdifficult because one has to consider all possible combinations ofrelations. As a result, we store the identities of all objects belongingto every subtype rooted at A in one Identity table and similarly theidentities of all objects belonging to every subtype rooted at P inanother Identity table. The relations between the two sets of objectsrefer to the Identity tables instead of the tables storing the actualdata. This is one of the important reasons for using the Identitytables. Besides these tables get used to keeping track of objects asthey are output to the CMDB using the adapters (to remember which one'shave been already processed).

Identity objects are project specific tables created to identify typesand all associated subtypes for each type. A type is a CI definition,for example Operating System. A subtype is Unix. Another subtype isWindows. For example: OperatingSystem—Unix—Linux would specify aparticular subtype. Each relation must associate its source and targetwith identity tables. The identity tables are used when outputting theER Model for: identity mapping; final type instantiation; and, keepingtrack of identity read state. In the ER Model, the identity of each CIinstance is separated from its attribute values in one embodiment.Identity tables are used to uniquely identify each CI instance and tokeep state for the CI instance in the project (for example, whether aproject adapter has exported a CI instance to its CMDB). Identity tableshave a fixed format that ER Modelers must obey when creating them.

The above defined schema permits modeling a full-fledged object modelwhich includes entities (an identity/entity pair) and relations betweenentities (an association between two entities identified by an entitysource ID and an entity target ID.

FIG. 4 illustrates a data structure of how the transformation rules areinternally stored. It is a diagram of a supported object modelcomprising ER Model Table Types. The transformation process involves aBQL report or reports, transformation rules and an output table.Somewhere the BQL report definition, transformation rule definition andoutput table definition. Those definitions have to be stored somewhere,and FIG. 4 represents one embodiment of a data structure to store thesedefinitions and other data needed for each transformation project. Table38 stores all the definitions for the BQL report, transformation rulesand output table.

Table 30 identifies each project and groups all the definitions andtransformation rules for that project together. The transformation rulesfor each project are stored in table 38. In fact, table 38 stores allthe rules for all the projects as well as all entities and all relationsbetween CI types for all projects. Which relations exist for eachproject are indicated in table 39. The entities which exist for eachproject are listed in table 41. Table 32 contains information whichindicates which transformation rules are used for each project. In otherwords, table 38 stores the relationship information (such as the“installed on” relationship) between CI classes illustrated in FIG. 1 aslines between the CI type boxes for all projects, and table 39 indicateswhich relations are used on each project. Table 34 stores theinformation needed for the export adapters. For example, table 34 storesinformation about which code the export adapter for each project needsto run, which classes need to be run, what tables are involved when theexport adapter is run. Table 36 stores information on which attributesare actually needed for each CI in case more attribute data has beencollected than is needed for a particular CI.

Table 30 stores identity objects in the model which are used to keeptrack of a unique project per entity and whether the entity has beenread by the adapter during output. Each identity has a correspondingentity associated with it. Entities represent the actual inventoryattribute information to be exported which was collected by theautomated inventory attribute discovery system such as the BDNAsoftware. The types of entities associated with identities can havedifferent types. For example, a ComputerSystemIdentity can be associatedwith entities of different types ComputerSystemWindows,ComputerSystemLinux, ComputerSystemSolaris, etc. The possible subtypesassociated with an identity are defined in the xsi_entity_type_refobject table 42. The adapter interface API uses the project data tovalidate and enforce constraints when processing a project.

Relation objects define a directed association between two identitiesand their specific subtypes in a project. Each xsi_relation_type_refthat is part of a project defines a ‘dependency’ attribute which can beone of: source|target|mutual|none. The information is used by theadapter to validated relations between CI's. For example, the relation:“OperatingSystem runsOn ComputerSystem” should be defined withdependency=‘mutual’. This allows the adapter framework to check to makesure that all OperatingSystem CI's have a relation to somecomputerSystem. This checking would be validation of a constraint, e.g.,each operating system must be installed on a computer system. Forexample, the relation “installedOn” would exist between identitiesComputerSystemIdentity and OperatingSystemIdentity. An actual instanceexample might be: source is scld(1)/WinCS(1) is associated with targetosId(2)/WinOs(2). Like identities, relations have a unique projectidentifier and read flag state which are used to track what objects areleft to be read in a project A project is essentially one conversion atone time of BDNA inventory data to IBM data. Essentially, a project isthe definition of how to convert from BDNA to CMDB models and thecurrent state of the conversion. You can load the project, start, orrestart the conversion. But you can only have one active conversion at atime per project.

Another attribute defined per relation type is “dependency”. Asmentioned above, a relation type can take the values source, target,mutual or none, and it is used to enforce constraints between therelation and its entities. In the case of the “installedOn” relation,the dependency is defined as “source” which means that there should beno Operating System entity that is not installed on a computer system.Example, “WinXP installedOn ComputerAbe2”. WinXP is the source,ComputerAbe2 is the target. To BDNA this means during discovery we foundthat ComputerAbe2 has Windows XP installed on it. Part of the validationwe do while processing the model makes sure that every OperatingSystemalso has a relation to a computer system since BDNA cannot discover‘uninstalled’ operating systems. On the CMDB side, you could have manyOperatingSystem disks sitting in a warehouse and not installed in anycomputer system. The adapter interface will flag entities in the modelthat break the dependency constraint and each adapter using theinterface can use the information to log problems or report errors.

FIG. 5 represents a typical CMDB extraction configuration. After loadinga project, the first steps are to issue a command to take the currentBDNA data, transform it into the project specific CMDB ER Model, andthen run the adapter or other tools to send it to its CMDB system. Theseare the steps performed during an extraction. BDNA defined the BQLlanguage for defining extraction projects. The transformation engine canload projects defined in that language and execute the steps above torun the project.

Block 44 represents a CMDB project having one or more BQL reports thatdefine the data that must be extracted from the BDNA inventory data foreach CI to be generated. Block 44 also contains the transform rules andthe export adapter configuration file. Adapter configuration is used tocontrol the process of exporting from BDNA to a CMDB system. FIG. 20represents the process of exporting the data from the BDNA CMDB ER Modelusing the CMDB specific adapters to external CMDB stores. The ModelExport Block Paging block 160 represents a process to break the exportprocess up into manageable size blocks while keeping all related datatogether. Each configuration is specific to the adapter and its externalCMDB system. In the case of IBM's CMDB adapter you can configure:location of CMDB books generated and how big is each CMDB book forexample.

The BDNA transformation framework 161 in FIG. 20 provides support for:Plug-in different adapters based on the type of CMDB export, queryingexport project definition, defining what part of the CMDB Model isexportable and visible, and maintaining the state of the export process,a consistent block based API to allow dividing the export process intomanageable block sizes (the process represented by block 160 in FIG.20).

Block 44 in FIG. 6 represents all the information associated with a CMDBproject. Before the project is loaded the information is in XML form.When the project is running the information is in memory.

The inventory attribute data that was automatically discovered by theautomated inventory system, such as the BDNA software, is represented byblock 46. Block 46 represents data structures in memory that embody thebase tables the BDNA software generates in its persistent datawarehouse. The base table has an entry for every hardware and softwareasset discovered and all the attributes about each asset that have beendiscovered during the automated inventory process.

Step 1: BQL Process (block 48) reads BQL Reports (subset of block 44)and uses existing BDNA data (block 46 Base Table) to produce CMDB ReportResults (block 50).The reports contain the attributes needed for eachCI.

Step 2: Xform Rules Processor (block 52) reads Xform rules (subset ofblock 44) and processes each rule against CMDB Reports Results (block50) to produce Destination ER Model (block 54). The transform rulesprocessor is a computer programmed to execute transform rules to convertthe data format of data in the reports to the format of data in adestination ER model data structure 54. The destination ER modelcontains the data structures required by CMDB. The transform rulesprocessor also generates defined relations in the CMDB ER model.

Step 3: Export adapter (block 56) reads Export Adapter Configuration(subset of block 44) and Destination ER Model (block 54) to export toExternal Destination (block 58).

Mapping and Transformation Process Details

FIG. 7 is a flowchart of the flow of steps of a genus of processes thatcan be performed to map BDNA inventory attribute data to CMDB formatdata. FIG. 13 is a graphical diagram of the workflow of one species ofprocess represented by FIG. 7. Step 60 represents a process where acontent writer for the schema mapping defines BQL Reports that definethe required attribute input data to the transformation process wheretransformation rules are used to convert the BDNA data into CMDB entitytypes. Reports are defined for: 1) collecting the attributes requiredfor the various entities in the CMDB data model; and 2) specifying therelationship between entities. In FIG. 13, the inventory reportdefinitions are represented by blocks 140. These reports define whichinventory data in the attribute data 142 which is needed to make up theCI types of the target system. Block 144 represents the BQL reportswhich are transform specific definitions. Inventory reports 140 are usedto process Discovery Data into report tables used by the BDNA InventoryUI applications. Xform specific report definitions (BQL reports) 144 areused to reorganize the BDNA discovery data (142) into the CI's matchingthe target CMDB ER model and create appropriate CMDB specific reporttables. The two are different and exist independently of each other. Thepurpose of the Inventory reports is to provide information for the BDNAInventory UI as efficiently as possible and therefore it is highlyde-normalized data. The purpose of Xform specific reports (BQL reports)and tables is to match the required CMDB ER model for each CI and theirrelations. The Xform specific reports and tables are highly normalizedand closely match the target CMDB schema. The CMDB transform specificdefinitions 144 are needed to: group data in ways not normally requiredby BDNA automated inventory attribute data collection systems;synthesize data required by the target CMDB system which is notcollected by the BDNA automated inventory attribute data collectionsystem, and define ER model relationships not required by the BDNAautomated inventory attributed data collection source system.

The BQL reports are executed by a report engine 146 which uses thedefinitions in the reports to extract the attribute data specified inthe BQL reports from the discovery attribute data stored in store 142 bythe BDNA inventory system. The report engine stores the extractedattribute data in the BDNA inventory reports and the CMDB specificreports 150.

The BDNA inventory system collects attribute data about computer systemsand operating systems in a single central report. CMDB systems modelcomputer systems and operating systems as separate CIs and arelationship between them. BQL reports are used to do the necessaryidentity and data splitting transformation and normalizing to matchCMDB's data model. An example of this is shown in FIG. 12. Block 130represents the fully aggregated computer system and operating systemattribute data collected by the BDNA system. A BQL report calledCSExtractReport extracts just the computer system attributes from theinventory data represented by block 130 and stores the computer systemdata in a store 132 which is used as an input to the transformationrules for the attributes of computer systems. Another BQL report calledOSExtractReport extracts the operating system attribute data and storesit is a store 134 which is used as an input to the transformation rulesfor operating system attributes. A BQL report called RelationExtraReportis executed to extract the relationship data between the computerssystems and the operating systems and store it in store 136.

Returning to the consideration of FIG. 7, in step 62, the content writer(a person) for the schema mapping defines transformation rules formapping BDNA inventory attribute data in the base tables of the BDNApersistent data warehouse to the CMDB schema. Each transformation rulemaps a single BDNA source to a single CMDB type. There can betransformation rules mapping a single BDNA source to multiple differentCMDB types, but mapping of multiple BDNA sources to a single CMDB typeis not allowed. For each rule, the writer of the transformation ruleneeds to specify: the source; the target; and a mapping from sourceattributes to target attributes. Some mappings specify valuetransformations using Java code. An example of some transformation rulesworking to transform names and units of measure is illustrated elsewhereherein.

Step 64 represents the process of defining a CMDB integration project.Projects need to be defined in some embodiments to allow users to dodifferent CMDB integrations from the same schema. For example, oneproject may be defined for exporting data to IBM CMDB, while anotherproject is defined for exporting data for BMC, while yet another projectmay be defined for importing data from an IBM CMDB into the BDNA system.

The input needed to define a project includes: 1) name of the project;2) path of the directory from where to load the source definitions; 3)path of the directory (or directories) from where to load thetransformation rules; 4) vendor name of the vendor of the schema towhich the BDNA data is to be transformed; 5) connection details toconnect to the CMDB target store (the input source connection is basedon the BDNA connection properties in some embodiments); 6) type of datatransfer (export or import); 7) any global properties associated withthe project; and 8) a description of the project.

Step 66 represents the process of loading all XML specificationsassociated with the project. There are various components of the XMLspecification of a transformation project. They are explained morebelow. A project XML specification is the external form of allinformation needed to extract BDNA discovery data, map it to the CMDBtarget ER model, and transform the ER model data out to the target CMDBsystem. The XML specification is the external set of files to be loadedin a specific BDNA system when we want to do an export to an externalCMDB target.

Step 68 represents the process of loading the transformation rules for agiven project into transformation engine 152 (usually a programmedcomputer as is the report engine 146). This step represents the processof parsing the transformation rules and putting the necessary data indatabase tables.

Step 70 represents the process of executing the transformation rules inthe transformation engine 152. The process comprises the steps: 1)checking if all the BQL Reports are up to date and refreshing them ifnecessary; However, before any transformation is executed the framework(161 in FIG. 20) checks to see if a BQL report exists and if it is up todate compared to the current BDNA discovery data. If no BQL reportexists or the BQL report is stale compared to the state of the discoverydata, the BQL Report is rebuilt before executing the transformation. 2)generates output tables in a data format that matches the CMDB schema byextracting the attribute data specified in the BQL report from the BDNAbase tables using a BQL processor; 3) iterate through each input sourceand execute the applicable transformation rules using a transform rulesprocessor to populate the output tables (data structures in theDestination ER Model).

Each transformation rule can: map BDNA attribute names into theappropriate CMDB name; do unit conversions; or combine and mergeattributes as required by each CMDB.

An example of a Configuration Item sample transformation rule formapping BDNA's inventory data for a host into BMC's Computer Systemshowing a typical transformation conversion (Name Mapping and UnitConversion) is given in Table 1 below.

TABLE 1 Example of Transformation Rule Action: Name Mapping and UnitConversion CMBD_OS Report Attribute Mapping Type BMC_ComputerSystem CIComments osComputerDomain Name mapping Workgroup hostName HostName BDNAdoes not track the next two attributes, reuse hostname hostNameDescription hostName ShortDescription serialNumber SerialNumberosComputerDomain Domain flashMemorySize FlashMemory ifThroughputDataRate operatingSystem_label Label Reuse same name for next attributeoperatingSystem_label BMC_Name operatingSystem_id Id cpu_list Unitconversion CpuList BDNA collects a string, BMC expects a numeric value.For example: “i586” should be mapped to 0, “PowerPC” should be mapped to3, and “ARM” should be mapped to 8. totalMemory TotalPhysicalMemory BDNAtracks total memory in megabyte units, BMC expects the value to berepresented as gigabytes, divide by 1024. hostname, nicList Mergeattributes BDNAUniqueInfo BMC requires a unique name for each Computersystem CI, generate one by combining hostname and mac addresses of thesystem. Type_cs, hardware Category, type_attr, item, BDNA collectinformation about the type manufacturerName, Model of computer into justtwo attributes. BMC requires that the data be split into 5 differentattributes. The BCM_ComputerSystem_XFR rule contains java code to parsethe two attributes and generate the five expected by BMC.

The transformed attribute data Is stored in an ER Model store 154 toawait export to the target system.

Finally, in step 72, the data in the output tables is exported to thetarget CMDB using the appropriate export adapter. An IBM CMDB requiresadapter 156 to extract the BDNA data into an intermediate XML form. Ifthe target system is a BMC CMDB, the BMC CMDB can be directly connectedto the ER Model 154 using JDBC and does not require an adapter.

FIG. 9 is a flowchart of a method of doing business to do the datatransformation which includes the manual steps of writing the BQL reportprograms, writing the transformation rule programs, and writing theexport adapter program. Step 80 represents the process of studying thedata model of the target system to determine the class definitions,subtype relationships and containment relationships and to determine thesemantics and data types and units of measure of each attribute of eachclass of asset and each subtype thereof and any other information neededto do the transformation.

Block 82 represents the process of studying the data model of the sourcesystem to determine the differences over the target system. Things thatneed to be determined are such things as: 1) which attributes arecollected about each type of asset that is within a class definition inthe target system data model; and 2) what are the differences betweenthe data format, units and semantics of the attribute data in the sourcesystem versus the data format, units and semantics the attribute datawould need to be in for storage in the appropriate class defined for thetarget system data model.

Block 84 represents the process of writing one or more BQL reportprograms capable of controlling a computer to extract for every CI typein the target system, the necessary attributes for the CI type in thetarget system which have been collected from the same type assetcollected in the source system.

Block 86 represents the process of writing one or more transformationrules programs which can control a computer to change the format, unitsand semantics of attribute data from the source system to the format,units and semantics compatible with the target system.

Block 88 represents the process of writing an export adapter which cancontrol a computer to invoke the application programmatic interface(API) of the target system and use said API to load data into saidtarget system. The export adapter is written so as to be conversant withthe application programmatic interface of the target system in that theexport adapter knows the function calls to make and knows the argumentsto supply to store data in the target system.

Block 90 represents the process of executing the one or more BQL reportson a computer to extract the attribute data needed from the sourcesystem to make up the Cis of the target system.

Block 92 represents the process of executing the one or moretransformation rules programs to take the attribute data extracted bythe BQL reports and transform it to the data format of the targetsystem.

Block 94 represents the process of storing the transformed attributedata in an ER data model store. The ER data model store is typicallycomprised of tables having the data structure of the tables used toimplement the target system data model.

Block 96 represents the process of executing the export adapter programon a computer to export data from the ER data model store to the targetsystem.

Object Oriented Transformation Rules

In the preferred embodiment, the transformation rules are written in anobject-oriented style. This means, for example, that where a CI typesuch as ComputerSystem CI 11 in FIG. 1 has subtypes which are species ofthe genus, there are generic transformation rules that apply to allspecies or subtypes (and are inherited by all subtypes) within the classand there are specific transformation rules for each species or subtypewithin the class. The combination of both the generic transformationrules and the specific transformation rules for the subtypes are used totransform the attribute data from the source system needed for theComputerSystem CI and all its subtypes such as Windows computers, SunSparc stations, etc. In other words, for a specific species or subtypeof the parent ComputerSystem CI, the transformation rules of theComputerSystem CI which are common to all species are used to transformattribute data from the source system into attribute data of the targetsystem for all the species or subtype CIs. To finish the process,transformation rules specific to each particular subtype are used totransform the attribute data from the source system which is peculiar tothe subtype into attribute data into the data format of the targetsystem. That transformed data is used to populate the subtype CIinstances.

The generic (for the parent CI) and specific (for the subtype CI)transformation rules for a subtype can be executed in any order.Transformation rules that are common to a CI type with subtypes arestored in an object which is the parent of subtype objects each of whichstore transformation rules which are unique to the transformation ofattribute data unique to the subtype, as shown in FIGS. 10 and 11.

FIG. 10 illustrates a class diagram for the objects which store theobject-oriented transformation rules for storage of the TransformationRules of the ComputerSystem CI with two subtypes illustrated. Object 100represents a memory object with a plurality of attributes, each with aname and a value. One of those attributes is shown at 102 and another at104.

Each attribute has a name which is not important and each has a value.The value is the transformation rule string (or a pointer thereto insome embodiments) which defines how to transform attribute data from thesource system into attribute data in the proper format for the targetsystem for one particular attribute of the ComputerSystem CI or class.Each attribute in the object 100 is a transformation rule pertaining totransformation of attribute data instances of one named attribute in theComputerSystem CI.

Subtype object 106 is the object with attributes which aretransformation rules for the Windows computer subtype. Attribute 108 isan attribute of object 106 which stores a string which is thetransformation rule for a particular attribute of the Windows computersubtype.

Subtype object 110 is the object with attributes which aretransformation rules for Sun type computer systems. Object 110 has anattribute 112 which stores a transformation rule for attribute A20 ofthe Sun Sparc computer systems.

FIG. 11 is a diagram illustrating how the object oriented transformationrules can combine-transform information from two or more objects in theinventory attribute data extracted by the BQL report from the sourcesystem to write a single CI in the target system or split-transforminformation from a single object extracted by the BQL report from thesource system into two or more Cis in the target system. FIG. 11 alsoshows a subtype object 120 having as its attributes the transformationrules 1-3 inherited from the parent object 116, and havingtransformation rules 4 and 5 which are unique to the particular subtypeCI.

The attribute data extracted from the source system as a BQL report isobject 114. Object 114 is the BQL Report for the ComputerSystem CI typerepresented by object 118. The attributes of object 114 are theindividual attribute values which have been extracted from the sourcesystem by the computer running the BQL report program in the sourcesystem data format. The object represented by oval 116 is the objectstoring the transformation rules for the CI object 118 which representsa CI type which has one subtype CI 120. The attributes of the object 116are the transformation rules themselves which are written to transformthe source system attribute data stored in objects 1-4 into attributesA1, A2, A3 and A4 of the CI object 118. Object 118 represents the targetsystem data model object for a particular CI type which has theattributes A1, A2, A3 and A4. The particular example shown hastransformation rule 1 transforming the data from objects 1 and 2 in theBQL report into the data format of and populates attribute A1. Rule 2transforms the BQL Report object 3 into the data format of and populatesattribute A2. Rule 3 transforms the BQL Report object 4 into the dataformat of and populates the attributes A3 and A4.

CI object 118 has a subtype CI object 122. This subtype CI 122 inheritsattributes A1 through A4 from the parent CI 118 and has its ownattributes A5 and A6 unique to this subtype. Transformation rulessubtype object 120 inherits transformation rules 1 through 3 from theparent transformation rules object 116 and has additional transformationrules 4 and 5. Rule 4 transforms attribute data stored as object 5 inWindows ComputerSystem BQL report subtype object 124 into the dataformat of and populates attribute A5 of the Windows species subtype CIobject 122. Rule 5 transforms attribute data stored as object 6 in BQLreport subtype object 124 into the data format of and populatesattribute A6 of the Windows subtype CI object 122.

Object 120 can but does not necessarily have to have rules 1, 2 and 3recorded therein because of the parent-subtype relationship. It mayrefer processing to implement these transformation rules to the codethat implements these rules in parent object 116. It does not matterwhether the inherited rules are processed first and then the rulesspecific to the subtype are processed.

The object-oriented transformation rules structure is useful because ina typical system the source system and target system data models havethousands of classes and subclasses each of which has many attributes.Therefore, there are even more transformation rules than there areclasses and subclasses. If all the transformation rules of a parentclass had to be copied into each subtype or child class, and there weremany subtypes, each time a transformation rule for a parent CI objectattribute was changed, it would have to be changed for all the subtypeCIs also. By storing the transformation rules common to all the subtypesof a parent CI only in an object that stores transformation rules forthe parent CI, each time one of these transformation rules was changed,it would have to be changed in only one location. Each subtype CI'stransformation rules would be stored in objects unique to thosesubtypes. When the attributes of the subtype CI were to be populatedduring a transformation process, the transformation rules for the parentCI type would be executed and then the transformation rules for thesubtype would be executed, in no particular order since there is nodependency between the two sets of transformation rules or their inputdata.

It is more difficult to create object-oriented transformation rule setsbecause it is initially difficult to determine which transformationrules are common to all subtypes. However, once that is done, themaintenance of the rule set is much easier. For example, suppose theparent CI has 20 attributes and there are 10 subtypes. If there are 20transformation rules for the parent, without object-orientedtransformation rules, there would have to be 2000 copies made of thetransformation rules for storage in objects that store transformationrules of the subtypes. By having the transformation rules stored in anobject-oriented data structure, with the 20 transformation rules commonto all the subtypes stored in a parent object and the transformationrules for each subtype stored in objects unique to the subtypes andlinked to the object storing the common transformation rules,duplication of the common transformation rules into all the subtypeobjects can be avoided.

Mechanism to Build Self Consistent Blocks of Entities to be Loaded intoa CMDB

Goals

The goal of this embodiment is to output the data that is collected in aschema (set of tables with relations between them) so as to load thedata in a CMDB system or any external system using a block size which isappropriate to the target CMDB system.

It is assumed that the data being loaded to the target system ispreprocessed so that it is stored in tables consisting of

-   -   1. entity tables that contain instances of objects that have        attributes    -   2. relationship tables that contain instances of relations,        where relation contains references to two instances (in other        words relates one instance to another instance).

The main issue discussed here is how to partition the complete set ofdata to be loaded into smaller blocks. It is impractical to assume thatthe whole model can be processed as a single operation for a CMDB forany but the simplest toy examples.

Various CMDB systems impose requirements on the blocks of data that canbe loaded. The following list summarizes the requirements imposed on thedata that is loaded into a CMDB system:

-   -   1. The data being loaded needs to be broken down into blocks of        data. This is because loading the entire data as a single entity        may not be possible for systems to handle. Further,        interruptions in the loading process for very large data as a        single entity, such as might occur in a power failure, would        cause waste of computer resources in attempting to reload the        entire data set again. This requirement is imposed by the fact        that the total amount of data to be loaded can be extremely        large since BDNA discovery run against a large enterprise        collects huge amounts of data typically. There are various        limits imposed by systems that disallow loading of such large        amount of data as a single operation. Typical systems require        the data to be broken down to smaller blocks of manageable sized        data. There is a limit on the size of the blocks that can be        loaded into the CMDB systems. This limit is called as the        “maximum block size”.    -   2. Each block of data needs to be self consistent which means if        the block contains a relationship instance (R1 that relates        Entity E1 to Entity E2), the related entities must be part of        the same block. In other words it would be illegal to send        Relation R1 and Entity E1 in one block and Entity E2 in another        block. Note that there may be situations where the same entity        needs to be sent as part of multiple blocks so as to satisfy        this requirement. This is inefficient because it involves        copying the same data into two or more different blocks. For        example assume that each block can contain up to 500 objects.        Assume that one instance E1 is related to 600 other instances.        It won't be possible to send E1 and all its related instances in        one block because of the size limitation. But it would be        permissible to divide the data such that one block has E1 with        300 related instances and another block has a second copy of E1        along with the remaining 300 related instances. The target CMDB        has the capability to relate the two instances of E1 that arrive        in different blocks and Illustrate that they are same. Note that        self consistency of the blocks is required because the target        system may be storing the objects in its own schema. Database        schemas typically enforce referential integrity [available in        any database reference e.g., C. J. Date, An Introduction to        Database Systems, Eighth Edition, Addison Wesley, 2003.]. Such        referential integrity makes sure that the data made available in        the database is consistent (i.e., it “makes sense”). For example        the definition of a relation is incomplete unless you know which        objects are being related to each other.    -   3. The goal of the embodiments taught herein is to load the CMDB        system as efficiently as possible. Efficient loading of the        system requires:        -   a. Each block must be built so that it is as close to the            specified size limit as possible. There is an overhead to            processing a block. So having a very large number of small            blocks is inefficient compared to having fewer larger            blocks.

However having very large blocks also leads to inefficiencies. There isan optimal block size that can be computed (and having blocks slightlysmaller than ideal block size is acceptable however it is not desirableto exceed the size limit). Computation of the optimal block size isoutside the scope of this application. However the scope of thisapplication is to attempt to build blocks as close to the size limit aspossible with individual block integrity.

-   -   -   b. The duplication of data must be minimized for maximal            efficiency. So the goal is to avoid sending the same data            multiple times in each of several different blocks as far as            possible. Typically the size limit may force the process to            copy entities, but such copying should be minimized since            the object gets loaded in the target system when the first            copy is loaded. Subsequent copies are required for            consistency of the blocks but do not add additional            information to the target system.        -   c. Also note that the data being loaded is typically stored            in a database. As a result the efficiency of computation            needs to be measured in terms of database operations.

BACKGROUND

This embodiment concerns the loading of data from the output schema tothe CMDB system (or any external system). It is assumed that previouslythe data has been transformed into a database schema that corresponds tothe data model of the target CMDB such as by the processes describedearlier herein. The database schema consists of:

-   -   1. Entity tables: these tables contain the entities (assets)        that correspond to Cis in the target CMDB.    -   2. Relationship Tables: These tables define relations between        two entities possibly of two different types. For example,        assume two CI types such as, ComputerSystem and OperatingSystem        types. The ComputerSystem CI type refers to the hardware that is        found by discovery process and the OperatingSystem CI type        represents the Operating System e.g., Linux, Windows etc. that        is installed on a given hardware. There can be relationship        between the instances of these two types called InstalledOn.        Each instance of the relationship identifies one instance of        ComputerSystem (say CS1) and one instance of OperatingSystem        (say OS1) such that OS1 is installed on CS1. The relation is        directed which means that the two end points of the relation are        asymmetric. For example, in the above instance of OS1 being        installed on CS1—the relationship doesn't imply that CS1 is        installed on OS1 (which is meaningless). Note that the        relationship between two types T1 and T2 could be        -   a. 1-1 Relation: where each instance of T1 is associated            with one and only one instance of T2 (and vice versa).        -   b. 1-N Relation: where each instance of T1 is associated            with possibly multiple instances of T2. For example multiple            Operating Systems may be installed on the same hardware            machine.        -   c. M-N Relation: where multiple instances of T1 may be            associated with multiple instances of T2 e.g., the relation            between IP addresses and machines—one IP address can be used            by multiple machines and a single machine can have multiple            IP addresses.

Note that dividing a given set of data into smaller blocks for variouspurposes has been discusssed in prior art (e.g., paging mechanisms usedby Operating Systems, reference: Deitel, Harvey M. (1983), AnIntroduction to Operating Systems, Addison-Wesley, pp. 181, 187, ISBN0201144735). The main difference between the problem discussed in thisapplication compared to the prior art is that the mechanism discussedhere is specific to the kind of data that consists of entities relatedto each other and blocks being built need to satisfy constraints thatrequire processing and understanding the data at a semantic levelwhereas the paging mechanisms such as those used by Operating Systemsare very generic and apply to any kind of mechanism. Using a mechanismsimilar to the one used in Operating Systems to builds blocks for thepurpose of loading a CMDB may result in inconsistent blocks that cannotbe processed by the target CMDB systems. If blocks were constructedusing arbitrary mechanisms for an Operating Systems paging mechanism theblocks most likely result in bad performance of the Operating System(but the blocks would not be considered invalid), whereas for loading aCMDB systems one could easily generate blocks that cause errors whileloading in the CMDB and would be considered invalid blocks. Such errorswould happen e.g., if a relation instance was added to the block withoutadding both the entities related by the relation.

Terminology

Note that the terms Graph, nodes and edges are not defined here but havethe usual meaning as per any Computer Science text.

Typically in this document, the graph represents a schema storingentities and their relationships in a database schema to be output to aCMDB. The terms nodes is used synonymously with the term Entity Types inthe output schema and the term edges is used synonymously withrelationships between such Entity Types. Instances are specific assetsof some particular entity type. In other words, each entity type has oneor more instances thereof.

Distance between two nodes in a graph: the distance between two nodes ina graph is the number of edges that need to be traversed to get from onenode to the other. For example, in the graph in FIG. 22, the distancebetween nodes B and D is one because only one edge can get us from B toD. On the other hand, the distance between nodes B and E is 2 (need totraverse edges B→C and C→E) and the distance between nodes B and F isthree (need to traverse edges B→C and C→E and E→F.

Project: A Project is the complete set of data and metadata that isaccumulated so as to be able to load the discovered data into a CMDBsystem. Such a project includes the actual instances of all thediscovered entities, their relations, and any metadata required forprocessing the data so as to enable loading the data into a CMDB.

Group: A group is a set of entity types and relationships that should beprocessed together. Any two entity types from two different groups arenot connected directly or indirectly by any set of relationships. Giventhe set of entities {A,B,C,D,E} and the relations {A→B, B→C}, therelationships and entity types can be grouped into two groups G1={A,B,C,A→B, B→C} and G2={D,E}.

Block: A block is a consistent set of entities and relations instancesthat can be processed for outputting to a CMDB together as a singleoperation (transaction). The project configuration has a ‘blockSize’which defines the maximum number of entities that can be included in ablock.

Dividing Input Entity types into Groups

Since the main constraint while building blocks using entities is to putrelated entities together in a block, any two entity types that are notconnected to each other through relations can be processed independentof each other. There is no reason to put entities from two unrelatedentity types in the same block—unless there was space available in theblock and there was no reason to add more entities to satisfy theconstraints arising due to relations.

A typical graph formed by entity types and relations can be divided intomultiple groups of entity types such that no two entity types belongingto two different groups have a relation between them. For example FIG.28 shows a graph that can be divided into three groups. Group G1 iscomprised of entities (asset types) A, B, C and D: parent entity A whichis parent to child entity B which is a parent entity to entities D andC. Group G2 is comprised of parent entity E which is parent to childentity F. There is no relationships between any entity in group G1 andgroup G2. Group G3 is comprised of entities G, H and I with parententity G being parents to entities H and I and entity H being parententity to entity I. There are no relationships between any entity ingroup G3 and any entity in group G1 or G2, and that is why they areseparated into the groups into which they are separated.

Note that there are several mechanisms available in the prior art thatcan be used to divide the graph into disconnected groups [Introductionto Algorithms (Second Edition) by Thomas H. Cormen, Charles E.Leiserson, Ronald L. Rivest, and Cliff Stein, published by MIT Press andMcGraw-Hill]. We do not describe any such mechanism here, but any ofthese prior art methods could be used to divide graphs into groups also.Some mechanism must be used to create independent groups. FIG. 21illustrates one example of such a mechanism. Step 201 represents theprocess of making the graph non directed by adding information to therelationship table so that not only can the child entity type of anyentity type be found, but also the parent of any entity type can befound. Step 203 represents the process of creating the first group bytracing the parent and child relationships in the relationship tables sothat all entities that are related to each other by child or parentrelationships are found and recorded as the first group. This involvestracing all the relationships (symbolized by arrows in FIG. 28) untildead ends are found and no new entities can be found by tracingrelationships. All entity types so found are recorded as the firstgroup, and a new group is formed in step 205 by repeating the tracingprocess until no new entities can be found. Step 207 represents theprocess of repeating step 205 as many times as necessary to create newgroups until all entity types in the graph have been processed.

The following pseudocode depicts how the computation of groups guidesthe subsequent process of building the blocks (the TransformationProjectobject stores the metadata including the graph; assume that thegetGroups( ) method of the TransformationProject object knows how tocompute the groups in the graph associated with the transformationproject).

public void doOutput(TransformationProject project) {  Set groups =project.getGroups( ); // compute all the groups in  the project  for(each group belonging to groups) {   process group;  } }

Another example method to form the groups is shown in flowchart form inFIG. 31. The process is basically comprised of the steps: 1) make thegraph non directed so that whichever entity one starts with, if it has aparent, the parent can be found (step 200); 2) start with any node(entity class, each class having possible multiple instances thereof) inthe graph and find all other entities that are either its parent orchild entity and put them into the first group (step 202); 3) once allparents and children entities of the starting node are found, proceedingto the next node in the graph that is related to the node just processedand repeating the process of tracing all its parents and children andlisting them as part of the group (step 204); 4) proceeding to anothernode related to the node just processed and repeating the process oftracing all nodes related to the node being processed and recording eachnode found as part of the group being formed (step 206); and 5)repeating the process of constructing a new group by picking a node andtracing its relationships to all other nodes and recording each nodefound as part of the group until no new node is found and declaring therecorded nodes as the new group (step 208); and 6) repeating thisprocess to construct other groups till all nodes in the graph areprocessed (step 210).

Step 200 in FIG. 31 represents the process, making the graph nondirected comprises going to the table where relationships are stored andadding information to it so that each child entity has an entryidentifying its parent. For example, using the graph of FIG. 22, therelationship table would look like table I below before it was made nondirected and would look like table 2 below after it was made nondirected.

TABLE 1 Directed relationships for graph of FIG. 28 A B B D, C C D E F GH, I H I

TABLE 2 Non directed relationships of graph of FIG. 28 A B B A B D, C DB, C C D C B E F F E G H, I I G H G H I I H

Step 202 in FIG. 31 represents the process of picking any node in agraph such as FIG. 22 and using a relationship table like Table 2 forthe graph and finding all the parents and children entities of the nodewith which the grouping process for group 1 was started. Once all parentand children entities of the starting node are found, each is listed inthe group being built. For example, if the starting node were to be B,using Table 2 would indicate that B knows C and D but it also knows A asits parent. So A, B, C and D would be added to the first group. Going toeach of nodes A, B, C or D and tracing its parents and children fromTable 2 would yield no new entity nodes. This would be the result ofsteps 202, 204, 206 and 208 and the conclusion of step 208 would be thatno new entity nodes have been found so group I is complete.

Step 210 represents the process of starting to construct the next group.This is done by picking any other node in the graph which is not one ofthe entity nodes in the group just completed and repeating steps 202,204, 206 and 208 until the next group is completed. Step 212 representsrepeating step 210 as many times as necessary to complete other groupsuntil all nodes in the graph have been included in a graph.

The reason that all entities related to a particular entity either aschildren or parents needs to be known is so that each block being builtis self consistent without the need to duplicate entity nodes.Self-consistent means that all entities related to a particular entityare in the same block. It would be possible to make a self-consistentblock without putting all entities related together in the same datablock, but that would require duplication which would result ininefficiency. For example, in FIG. 28, it would be possible to make twoself-consistent blocks out of group G1 with one block comprised ofinstances of the B, C and D entities. The other block would be comprisedof instances of the entities B and A. This would require duplication ofthe data from the instances of entity B in both data blocks, and thiswould be inefficient.

The next section discusses the details of the steps used for computingthe blocks of the appropriate size for a given group.

Heuristic-Based Method to Build Self-Consistent Blocks

In the following discussion we assume that the independent groups havealready been determined, and the size of the blocks is predominantlydetermined by the number of entities in the block. The preferredheuristic-based method to build self-consistent blocks is illustrated inFIG. 30 in flowchart form, and makes the following assumptions:

-   -   1. The size of the relations are not significant (relations are        just a listing of the parent and each child)    -   2. All entities are of approximately the same size.

If necessary, adjustments can be made for any discrepancies caused bythe two assumptions: An example of a situation where an adjustment mightbe necessary is as follows. Suppose in FIG. 28, entity type B is acomputer system and entity type D is an operating system and entity typeC is a disk drive. D and C are children entities of the computer systembecause both the operating system and the disk drive are installed onthe computer system. An instance of a computer system entity B may have10 K bytes of data. More data is collected on operating systems thoughso suppose each instance of an operating system entity D has 100 K bytesof data. Suppose also that each instance of a disk drive has 50 K bytesof data. Suppose there are 100 instances of computer systems B. Thismeans that loading each instance of a computer system B will cause 10 Kbytes of data for the computer system to be loaded into the data block,and will also cause to be loaded 100 K bytes of data for the operatingsystem and 50 K bytes of data for the disk drive. If this is done 100times for all the instances of computer system entity type B, themaximum data size of the data block can be exceeded and duplication willresult in such a case. To avoid overrun of the maximum size limit, aweighting algorithm based upon connectivity is used. That weightingmechanism is described below.

-   -   1. We can actually assume a non-zero finite size per relation        (typically all relation instances have the same size since the        basic information in a relation instance is just the identity of        the parent and child entities). The number of entities per block        can be reduced by a specific fraction that makes adjustments for        the relation instances added to the block.    -   2. If there are huge differences between the sizes of the        entities of different types, an algorithm which assumes all        entity instances are of approximately the same size can “break”        by exceeding the maximum block size. To prevent that, the        preferred algorithm taught here uses a weighting algorithm based        upon the relative size of the parent and child instances. Using        this weighting, the cardinality of each entity is “normalized”        by multiplying the cardinality times the weighting ratio. The        resulting product is the normalized cardinality that the entity        has. The normalized cardinality affects the connectivity which        affects the sort order, all of which will be explained further        below in connection with the description of the algorithm to        build the data blocks. This weighting process helps prevent        overrun of the maximum data size for the block. The process of        calculating the weighting ratio is represented by step 218 in        FIG. 30. Basically, the weighting ratio is the data size of the        child entity divided by the data size of the parent entity.

The following are the steps followed by the heuristic-based mechanism tobuild self-consistent blocks of data for one group of entity types andrelationships, and are illustrated in FIG. 30, comprised of FIGS. 30Aand 30B.

The preferred algorithm to build the self-consistent blocks of size nomore than the maximum size starts with the most connected nodes first,as determined by step 222 in FIG. 30. This is because when one stores anentity node in a self-consistent block for export, all entity nodesrelated to the entity node assigned to the block must also be taken inthe same self-consistent block to maintain the consistency thereof. Theexception to this rule is when taking an instance of an entity and allinstances of entities related to the selected entity would exceed themaximum data size of the block. In such a case copying of data alreadyloaded into the block into another block would occur for purposes ofself-consistency, and this would result in inefficiency. This is why thealgorithm starts with the most connected entity nodes first. Taking themost connected nodes first will result in the taking of the most databecause the entity nodes having relationships with the most connectednode must also be taken. The situation is the data analogy of pickingone grape up in a bunch and bringing the whole bunch up with it asopposed to picking up a single grape. So to avoid exceeding the maximumblock size, the most connected node is taken first and the amount ofdata taken is calculated after taking all the related entity nodes also.If there is still room in the data block, the next most connected entitynode is then taken.

We use the example graph shown in FIG. 22 throughout the followingdescription of the process of FIG. 30 to illustrate the preferredmethod. The first step is to divide the graph into groups of relatedentities as symbolized by step 214. This can be done using any algorithmincluding prior art algorithms. One example of how to do this is shownin FIG. 31. The process to build the data blocks from the groups startswith step 216.

-   1. Step 216—Compute Relationship Cardinality: Cardinality means the    number of instances of each relationship. In the database    implementation, each relationship is represented by a table with a    row for each instance of such a relationship. For example, if entity    B is a computer system and entity D is an operating system and    entity C is a hard disk, and there are 98 computer systems in a    company, each having an operating system of entity type D, the    number of rows in the relationship table showing particular    operating systems installed in particular computer systems would    be 98. The cardinality of that relationship would be 98. It is    simple to compute the total number of rows in each relationship    table in step 216 to compute the cardinality of the relationship    represented by the relationship table. Each relationship table    represents one relationship. For the example graph of FIG. 22, the    resulting cardinality data for each relationship is shown in dashed    boxes next to the relationship lines in the graph of FIG. 23. In the    example graph shown in FIG. 23, the following cardinality values are    assumed for the relationships:

No Relationship Count 1 A → B 1000 2 B → C 10000 3 B → D 5000 4 C → D1000 5 C → E 2000 6 E → F 4000

-   2. Step 218—Compute a Weighting Ratio: This step is used in the    preferred embodiment, but may be omitted in some alternative    embodiments especially where the size of all instances of entities    is approximately the same. In the preferred embodiment, the    weighting algorithm is used to prevent overruns of the maximum data    size of a block when the size of data of instances of a child entity    far exceeds the size of data of an instance of the parent entity of    said child. The weighting ratio is simply the data size of an    instance of the child entity divided by the data size of an instance    of the parent entity. As will be described further below, the    cardinality of each relationship is multiplied by the weighting    ratio for that particular relationship so as to generate a    normalized cardinality. The normalized cardinality is used in    calculating the connectivity metric of each relationship, and the    connectivity metric is used in the sorting of step 222 to order the    entity types in descending order of connectivity.-   3. Step 220—Compute Connectivity Metrics for Entity types: For each    entity type step 220 computes the connectivity metric using the    normalized cardinality. The connectivity metric is defined as the    sum total of the normalized cardinality of all relationships that    are either incoming to the entity type or outgoing from the entity    type. In embodiments where the weighting ratio is not used,    calculation of the connectivity metric of an entity type simply    involves summing the cardinalities of each of the incoming and    outgoing relationships of the entity type. In other words, the    normalized cardinality is the total of all parent and child    relationships for an entity type divided by the weighting ratio. For    example, suppose the weighting ratio defined by the data size of an    instance of B divided by the data size of an instance of A is one.    For entity type B, the relationship A→B is incoming and    relationships B→C and B→D are outgoing. The sum total of the    cardinality of all the relationships incoming to and outgoing from    entity type B is 1000+10000+5000=16000. This value represents the    connectivity metric for entity type B. If the weighting ratio were    two, representing a situation where the data size of an instance of    entity type B is twice as large as the data size of an instance of    entity A, then the connectivity metric for entity type B would be    16000 multiplied by 2=32000. The weighting ratio would move this    entity type up in the sort list to a higher position so that it    would be taken earlier than otherwise would be the case if the data    size of an instance of the child entity type were the same size as    an instance of an entity of the parent type Similarly the    connectivity metrics of the remaining entity types are computed. The    table given below assumes the weighting ratio is one for each    parent-child relationship so that the connectivity metric is simply    the sum of the cardinalities of all the incoming and outgoing    relationships of an entity type.

Calculation showing sum Connectivity Entity of incoming/outgoing metricfor the No Type relationship cardinality entity type 1 A 1000 1000 2 B1000 + 10000 + 5000 16000 3 C 10000 + 1000 + 2000 13000 4 D 5000 + 10006000 5 E 2000 + 4000 6000 6 F 4000 4000

-   4. Step 222—Order entity types in decreasing order of connectivity:    step 222 represents the process of sorting the entity types in    decreasing order of the connectivity metric value. For the example    above, the data after such ordering will be as follows:    -   a. B (16000)    -   b. C (13000)    -   c. D (6000)←Note that D/E have same value of connectivity        metric. So their order can be interchanged.    -   d. E (6000)    -   e. F (4000)    -   f. A (1000)        The reason this step is done is to help prevent overfilling a        data block by starting the process of filling the data block        with the entity with the highest connectivity metric. The entity        type with the highest connectivity metric will take the most        data with it when an instance thereof is loaded into the data        block along with all related instances. For example, suppose a        computer system entity type is the most connected entity type        because it is the parent entity type to an operating system        entity type, a disk drive entity type, a network interface card        entity type, several different application program entity types,        a removable hard drive entity type, a flat screen display entity        type, a keyboard entity type, and a pointing device entity type.        Each parent instance of a computer system, when loaded into a        data block, will take with it instances of all these different        child entity types, so the more connected a entity type, the        more data instances thereof will take with it when they are        loaded into a data block. By taking these more connected        instances first when the maximum amount of room is available in        the data block, there is less chance of overrunning the maximum        data size of the block.-   5. Step 224—Building the Block by adding Data to it: Step 224    represents the process of starting to build a self-consistent data    block. The details of the process of adding the data of all related    entity instances to a data block being filled is given in flowchart    form in FIG. 32. The relationships of instances of particular entity    types is illustrated in FIG. 33. Suppose entity type A is a network,    entity type B is a computer system, entity type D is an operating    system and entity type C is a printer. Instances A1 and A2 represent    individual networks and arrow 230 represents the fact that computer    system instance B1 is coupled to network instance A1. Arrows 232 and    234 represent the fact that computer instances B2 and B3 are coupled    to network instance A2. Arrow 236 represents the fact that operating    system instance D1 is installed on computer system B1 and so on for    the other operating system instances. Arrows 238 and 240 represent    the fact that printers C3 and C4 are both coupled to computer system    B3. So for the parental relationship between entity types A and B,    there will be a cardinality of three because the relationship table    for the relationship A is parent of B will have three rows in it,    each row containing the information represented by one of the arrows    230, 232 and 234. The connectivity of a type is simply how many    relationships, both incoming and outgoing, it has. The connectivity    metric of a type is the sum of the number of rows in each    relationship table where that type is at one end of the relationship    arrow or the other.-   6. Step 226—Process the Remaining Entities in the Group: Step 226    represents the process of loading into the data block instances of    the remaining entities in the group that have not been included in    any data block built in step 224. Instances of entities processed in    this step are instances of entities that are not related to any    other entity in the group. The processing of such entities is    simple, since they can be grouped together in any order so as to    build a block that satisfies the size limit.-   7. Step 228—Mark the Entities So Processed “Done”: Each time a    relation/entity instance is added to a block, the relation/entity is    marked DONE in the database in the table storing the corresponding    information. A relation that is marked DONE doesn't need to be    processed again. An entity that is marked DONE may have to be    processed again since the same entity may have to be added to    multiple output blocks in cases where the maximum size limit    prevents all related instances from being loaded into a data block.    However, it is necessary to remember somehow that instances of an    entity have been processed before so as to find all the “remaining”    entities that still need to be processed as described in step 226    above.

Another reason to remember which entities/relations have been processedbefore is to be able to process the data after a failure of the system(e.g., due to power failure). For example, loading of large amount ofdiscovered data into a CMDB system can take several hours. If after anexecution of several hours, the system is forced to shutdown due to acatastrophic failure such as power shutdown, the mechanism of step 228that marks the processed entities/relations as DONE will prevent theneed to re-load the entities/relations that have already been loaded.

-   8. Step 229—Repeat the process of FIG. 30 for each group until all    groups in the graph are exhausted.

Referring to FIG. 32, the following steps show how to build one or moreself-consistent data blocks by incrementally adding data of instancesfrom a group to it:

Step 242—Start with an independent group created by any process such asthe process of FIG. 31 which contains the entity of the highestconnectivity metric. Suppose there are K entity types in that group.Step 242 calculates the value N divided by K where N is the maximumlimit on block size is N expressed in terms of the number of entitiesthat can be stored in a self-consistent data block. N is calculated bydividing the maximum block size desired (or set by the CMDB) ingigabytes by the average data size in gigabytes (or some other measureof data size consistent with the units for the maximum data size of theblock) of an instance of the entity type in gigabytes. This calculationof N assumes all instances of entity types in the graph are the sameapproximate size. A weighted average of data sizes of instances of theentity types in the graph could also be used for N if the size ingigabytes of instances of the entity types varies substantially from oneentity type to another. The weighted average would be the sum of theinstance data sizes with the instances data size being weighted by thenumber of instances of each particular data size there are. The averagesize of an entity type is the average data size of an instance of thatentity type.

Once N/K is calculated, the resulting number is the number of instancesof the entity type with the highest connectivity metric are taken andloaded into the data block. As each instance is loaded, it is markeddone. If the first block fills up before all instances of that entitytype are taken, a new block is started using the instance of the entitytype being processed which are not marked done.

As an example of the calculation of step 242, suppose the maximum blocksize N in entities is calculated to be 1000 and the group size of thegroup containing the most connected entity type is 4 different entitytypes such as group G1 in FIG. 28. So 1000/4=250. Suppose also that inthe graph of FIG. 28 among all three groups G1, G2 and G3, entity type Bhas the highest connectivity metric and entity type C has the secondhighest connectivity metric. Therefore, 250 instances of entity type Bwill be loaded into the first data block. Loading of instances of otherentity types related to each of these 250 instances of entity type B mayoccur too as will be described in other steps the details of which aregiven below. Call the entity type with the highest connectivity metricTmax. Assume that all the instances picked and loaded into a data blockare added to a data block called currentBlock.

The size limit on a data block is not absolute and one can exceed themaximum block size a little, but exceeding it by a great deal isundesirable. And if the block size is consistently exceeded, aperformance penalty over other software that does not exceed the blocksize will be present.

It is possible to guarantee that the size limit will not be exceeded bychecking the amount of data stored in each block after each instance ofan entity type is loaded and all its related instances are loaded. Ifthe last loading operation caused the maximum size limit to be exceeded,one can pull out from storage in the block the last instance loaded andits related instances which caused the block size to be exceeded andrepeat this process as many times as necessary till the maximum sizelimit is not exceeded.

Step 244—Process each relation that connects related entity types atdistance 1 from entity type Tmax so as to load the first level ofinstances related to the instances of entity type Tmax just added instep 242 to currentBlock. What this means is that the relationship tableis consulted for the relationships that entity type Tmax has and theentity types that are only one level away from Tmax are determined. Forexample, in the graph of FIG. 22, entity types A, D and C are all onelevel away from Tmax entity type B, but entity types E and F are morethan one relationship level away from Tmax entity type B. So step 244represents, in this example, the process of loading into currentBlockinstances of entity types A, D and C which are related to the 250instances of entity type B just loaded. A running count of the amount ofdata in the instances loaded into each data block is kept in mostembodiments so as to know when the size limit of the data block has beenreached.

So in other words, if B is the entity type picked by step 242, thenentity types at distance 1 are A, D and C. All instances of entity typesA, D, and C that are related to instances of entity B loaded intocurrentBlock through relations A→B, B→C and B→D respectively are addedto the current block.

Step 246—Repeat step 244 to load into currentBlock related instances ofentity types at distance 2 (one more than previous step) from entitytype Tmax. In the graph of FIG. 22, entity types of distance 2 includesonly E. So in this example, step 246 represents the process of loadinginto currentBlock all instances of entity type E that are related toinstances of entity type C already loaded into currentBlock via relationC→E are added to currentBlock. Note that in this example of the graph ofFIG. 22, such instances can only be of entity type E, but in some othergraph where entity type C is parent to two different entity types, say Eand G, then the instances loaded in step 246 would be instances ofentity type E and G which are related at distance one from the instancesof entity type C already loaded into currentBlock.

The reason the instances at relation distance two from the instances ofthe entity type which is Tmax are not loaded into currentBlock duringstep 244 is because the identities of the instances at distance two fromthe instances of Tmas are not present in the relationship tables showingrelationships of other entity types to the entity Tmax. In the preferredembodiment, to learn the identities of the entity types at relationdistance two from entity type Tmax requires consultation of therelationship tables showing all incoming and outgoing relationships withthe entity types at relation distance one from entity type Tmax. Thisdetermination is made in step 246, and the instances of the entity typesat distance two which are related to the instances at relation distanceone from entity type Tmax which have been previously loaded intocurrentBlock are then loaded into currentBlock.

Step 248—Repeat steps 244 and 246 to load all instances of entity typesrelated to entity type Tmax into current block, expanding the level ofthe search by one relation level each time until the complete set ofentity types related to entity type Tmax in this group is exhausted. Inother words, keep searching for related entity instances, expanding thesearch by one level each time using the relation tables until no morerelated entities in the group can be found. Each time an instance isloaded, it is marked done and each time all instances of a relation areloaded, the relation is marked done, as taught in step 228 of FIG. 30B.

Step 250—Repeat the process for all instances of all entity types indescending order of connectivity metric until the entire group is loadedinto one or more blocks. Each time a data block is filled, the processstarts again on the same group and is repeated until all instances fromthe group have been loaded into a data block and marked done. Each timea new data block is started, if there are instances of Tmax entity typestill not marked “done” those instances are started with by taking N/Kof these instances and then repeating the expanding search processdescribed above with respect to steps 244 through 250. When allinstances of entity type Tmax have been loaded in a data block andmarked done, the process continues starting with instances of the entitytype with the next highest connectivity metric. The process continues indecreasing order of connectivity metric until instances of all entitytypes in the group have been loaded and marked done. The process thenproceeds to steps 226, 228 and 229 in FIG. 30 to load all “singleton”instances of entity types not related to any other entity type, markeach instance done after it is loaded and repeat the process for allother groups until all instances of all groups have been loaded into oneor more data blocks.

Each data block is self-consistent because all related instances will beloaded in it, and copying of data multiple times will occur if necessaryto keep the data blocks self-consistent. But because of the heuristicnature of the process, copying of the same data into more than one blockis minimized if it occurs at all thereby making maximum efficiency ofuse of computer resources.

Best Case and Worst Case Situations for the Proposed Mechanism

The heuristic based mechanism provided works best when the distributionof the edges between the nodes is uniform. For example, assume a 1-Nrelation A→B such that A has 1000 entities and B has 2000 entities andthere are 2000 instances in the relation. The distribution is consideredideally uniform when the each entity in A is connected to approximately2 entities in B i.e., each entity of A has two out going edges to B. Thedistribution will be highly non-uniform if e.g., 1 instance of A had allthe 2000 edges (and the remaining had none).

Note that in the ideal situation, if all the relations were 1-1, theabove algorithm will pull out N/K entities of each type. Since there areK entity types, the resulting block will consist of N entities, which isthe maximum allowed block size. Also there will be no duplication ofdata between different blocks.

Let us consider the worst case where one instance of A (say A1) has 2000edges. Assume each block could have 100 entities. There is no way tobuild a single block that includes all related entities that include A1.One way to build the blocks would be to replicate A1 in 20 blocks whereeach block includes 100 entities from B (strictly speaking the blockswill be of size 101—but let us ignore the slight overflow in the blocksize). Note that having to copy A1 into multiple blocks leads to asource of inefficiency since A1 has to be communicated twenty times andloaded into the system.

This example illustrates an extreme case for purposes of explanation butin general the goal is to avoid duplication of entities into multipleblocks. And the proposed mechanism achieves this goal to a very largeextent esp if the distribution of edges between the nodes is uniform.

Efficiency of Loading Data into a CMDB Achieved by the Current Approach

Note that performance comparison of the proposed approach with existingapproaches (available in prior art) has not been presented because theauthors are not aware of any relevant prior art that approaches thisproblem. The reason for this is primarily due to the fact that to ourknowledge, discovery tools available as prior art do not discoversignificantly large amount of data so as to make the problem of loadingthe data into a CMDB a significant issue. For example, when the BDNAteam tried to inquire from Vendors about their load testing of theirsystems, the Vendor had tried load testing using 10,000 CIs. Thediscovery system of BDNA easily discovers asset data that is multipleorder of magnitude more than the said number (for large enterprisesnumber of assets including hardware and software assets that potentiallytranslate into CIs can be easily as large as several millions).

An example scenario that was tried with a particular Vendor of CMDB,around 76,000 CIs and 47,000 relation instances were loaded into a CMDBsystem which took about 7 hours. We do not present very preciseIllustrations because the performance depends on several factors such asthe kind of hardware machine used for running the CMDB, the effect ofnetwork load, the target CMDB system etc. (different Vendors performdifferently). As a result we have presented approximate results based onfew runs of the dataset that we implemented. Also note that doing suchperformance studies requires significant amount of resources making itdifficult to do such research. Also, the performance impact can beeasily analysed without doing actual performance studies (which makessuch study less important).

The important fact to note is that if a significant number of CIs areduplicated during the loading of a CMDB, the loading of the data to theCMDB can take extra time running into several hours. If customers needto load the CMDB data on a regular basis (for example, weekly) suchperformance makes significant impact on the usability of system.

To discuss efficiency of the presented approach we present twoalternative approaches that have drawbacks compared to the presentedapproach.

Process One Relation at a Time

This approach takes one arbitrary relation at a time and processesentities related by the given relationship. If an entity type E1 isconnected to two other entity types E2 and E3 by two separaterelationships R1 and R2, entities from type E1 will be communicatedtwice—once while processing relation R1 and again while processing R2.Essentially, an entity becomes part of as many blocks as the relationsthat it forms part of. Note that if no entity type in the graph wasconnected to more than one other entity type, this approach will performas well as the presented approach. However if entity types wereconnected to more than one other entity types, this approach requiressignificant duplication of entities in blocks. For example, if on anaverage each entity type was related to two other entity types thisapproach will send twice as many entities to the CMDB as the presentedapproach causing 100% extra overhead.

Incrementally Grow a Block with Unordered Nodes

This approach doesn't provide any specific order to the node as providedby the approach presented in the application. Assume the maximum blocksize is N entities and there are K entity types in a block. Thisapproach takes the graph as provided and starts with any entity type andadds N/K entities of the said entity type to the current block beingbuilt. It further takes all entities that are related to the entities inthe current block at distance 1 and continues to add more and moreentities by increasing the distance by 1 each time. The building of thecurrent block needs to stop if adding more entities causes the blocksize to exceed N. Note that the drawback of this approach is that sincethe entity types are not ordered in any particular order, the number ofrelated entities being added at each step becomes unpredictable. Forexample consider the graph shown in FIG. 29.

The graph has 4 entity types A, B, C, D and three relationships A→B,B→C, C→D. Assume cardinalities of relations as follows: A→B as 1000, B→Cas 2,000, and C→D as 4,000. Also assume that each entity of type A isrelated to two entities of type B; each entity of type B is related totwo entities of type C; each entity of type C is related to two entitiesof type D. Since nodes are picked in a random order it is possible thatthe entity types are picked in the order A, B, C, D. Assume, that theblock size specified for the project (value if N) is 400 entities. Sincenumber of entity types in the group (value of K) is 4, the value of N/Kis 100. If 100 nodes of entity type A are picked, it is likely to bringin 200 entities of type B which will further bring in 400 entities oftype C which will further try to bring in 800 entities of type D. Ofcourse, since the block size limit is 400, so the block accordingly willconsist of 100 entities of type A, 200 entities of type B and 100entities of type C (we need to bring in only a subset of the relatedentities of type C). Note that such a block will result is duplicationof several entities in subsequent blocks. Since only ¼^(th) of theentities of type C related to entities of type B were used, theremaining ¾^(th) of the entities of type B (150 entities) must beduplicated in subsequent blocks (at least). Furthermore, since none ofthe entities of type D were included in the block, the correspondingrelated entities of type C (100 entities) need to be included insubsequent blocks as well to get the entities of type D. So in a blockof 400 entities if 250 entities are duplicated, this causesapproximately 250/400*100 i.e., 60% extra overhead.

On the other had let us compare the performance based on the best modeapproach discussed in this application. The connectivity metrics for thevarious entity types is A=1000, B=1000+2000=3000, C=2000+4000=6000,D=4000. By sorting the entity types in reverse order of the connectivitymetric we get the list C, D, B A (we refer to the list as L). Asexplained above, the value of maximum block size (N) is 400 and thenumber of entity types in the group (K) is 4. The value of N/K is400/4=100. The first entity type in the list L is picked which is C.Adding 100 entities of type C, the next step picks all related entitiesof type C and D that are at distance 1. For 100 entities of type C,there are 50 entities of type B and 200 entities of type D. The nextstep picks entities at distance 2, i.e., entities of type A related tothe block built so far. Since the block built so far consists of 50entities of type B, there are only 25 entities of type A. The resultingblock consists of 100 C's, 200 D's, 50 B's and 25 A's=total of 375entities. The block was constructed within the required limit. Note thatthe important feature of the block so constructed is no entities need tobe duplicated in subsequent blocks since all related entities have beenincluded in the block.

Although the invention has been described in terms of the preferred andalternative embodiments described herein, those skilled in the art willappreciate other alternative embodiments which are within the spirit andscope of the invention disclosed herein. All such alternativeembodiments are intended to be included within the scope of the appendedclaims.

1. A process to build self-consistent data blocks for a CMDB system orany other external system using a data block maximum size, comprising:A) dividing a graph of entity types into independent groups, each groupincluding entity types related to other entity types by parent-childrelationships; B) computing the cardinality of each relationship; C)computing a connectivity metric for each entity type; D) sorting theentity types into decreasing order of connectivity metric; E) loadingrelated instances of related entity types into one or more data blocksso as to not substantially exceed a maximum data size for each blockstarting with the entity type of highest connectivity metric and workingdownward on the sorted list of entity types generated in step D; F)loading into said one or more data blocks any instances of entity typesnot related to any other entity types; G) marking each instance whichhas been loaded into a data block as done; and H) repeating steps E, Fand G until all instances of all entity types of all independent groupshave been loaded into one or more data blocks.
 2. The process of claim 1further comprising a step B1 comprising calculating a weighting ratiofor each parent-child relationship by computing the ratio S2 divided byS1, where S2 is the data size of an instance of the child type entity insaid relationship and S1 is the data size of an instance of the parenttype entity, and further comprising a step B2 of multiplying saidcardinality of each said relationship by said weighting ratio of saidrelationship so as to generate a normalized cardinality for each saidrelationship before computing said connectivity metric for each saidentity type, and wherein step C comprises computing said connectivitymetric for each entity types using said normalized cardinality for eachrelationship of said entity type.
 3. The process of claim 1 wherein stepE comprises: I) starting with the independent group which contains theentity type with the highest connectivity metric, hereafter referred toas Tmax; J) calculating N divided by K where N is the maximum block sizeexpressed as the maximum number of entities and K is the number ofentities in the group; K) load N/K instances of entity type Tmax into adata block referred to as currentBlock; L) load said currentBlock withall instances related to said N/K instances of entity type Tmax atrelation distance one from said instances of entity type Tmax loaded instep K; M) for each related instance loaded in step L, determine otherrelated instances of entity types at relation distance one from saidinstances of entity types loaded in step L; N) load into said currentblock all instances determined in step M which are related to instancesloaded in step L; O) repeat search and loading processing like that ofstep M and N as many times as necessary to load instances related tosaid instances of entity type Tmax loaded in step K at each level ofrelation in said group until all instances of said group are loaded intosaid currentBlock.
 4. The process of claim 2 wherein step E comprises:I) starting with the independent group which contains the entity typewith the highest connectivity metric calculated using said normalizedcardinalities; J) calculating N divided by K where N is the maximumblock size expressed as the maximum number of entities and K is thenumber of entities in the group; K) load N/K instances of entity typeTmax into a data block referred to as currentBlock; L) load saidcurrentBlock with all instances related to said N/K instances of entitytype Tmax at relation distance one from said instances of entity typeTmax loaded in step K; M) for each related instance loaded in step L,determine other related instances of entity types at relation distanceone from said instances of entity types loaded in step L; N) load intosaid current block all instances determined in step M which are relatedto instances loaded in step L; O) repeat search and loading processinglike that of step M and N as many times as necessary to load instancesrelated to said instances of entity type Tmax loaded in step K at eachlevel of relation in said group until all instances of said group areloaded into said currentBlock.
 5. The process of claim 2 wherein step Ecomprises: I) starting with the independent group which contains theentity type with the highest connectivity metric calculated using saidnormalized cardinalities; J) calculating N divided by K where N is themaximum block size expressed as the maximum number of entities and K isthe number of entities in the group; K) load N/K instances of entitytype Tmax into a data block referred to as currentBlock; L) load saidcurrentBlock with all instances related to said N/K instances of entitytype Tmax at relation distance one from said instances of entity typeTmax loaded in step K; M) for each related instance loaded in step L,determine other related instances of entity types at relation distanceone from said instances of entity types loaded in step L; N) load intosaid current block all instances determined in step M which are relatedto instances loaded in step L; O) repeat search and loading processinglike that of step M and N as many times as necessary to load instancesrelated to said instances of entity type Tmax loaded in step K at eachlevel of relation in said group until all instances of said group areloaded into said currentBlock; P) starting with the group in which theentity type with the second highest connectivity metric resides, repeatsteps J through O until all instances of said entity type with saidsecond highest connectivity metric resides and instances related theretoat all levels of relation are loaded into a data block; and Q) repeatingprocessing like step P as many times as necessary for all entity typesin all groups until all instances of all entity types have been loadedinto one or more data blocks.
 6. The process of claim 1 wherein step Ecomprises: I) starting with the independent group which contains theentity type with the highest connectivity metric; J) calculating Ndivided by K where N is the maximum block size expressed as the maximumnumber of entities and K is the number of entities in the group; K) loadN/K instances of entity type Tmax into a data block referred to ascurrentBlock; L) load said currentBlock with all instances related tosaid N/K instances of entity type Tmax at relation distance one fromsaid instances of entity type Tmax loaded in step K; M) for each relatedinstance loaded in step L, determine other related instances of entitytypes at relation distance one from said instances of entity typesloaded in step L; N) load into said current block all instancesdetermined in step M which are related to instances loaded in step L; O)repeat search and loading processing like that of step M and N as manytimes as necessary to load instances related to said instances of entitytype Tmax loaded in step K at each level of relation in said group untilall instances of said group are loaded into said currentBlock; P)starting with the group in which the entity type with the second highestconnectivity metric resides, repeat steps J through O until allinstances of said entity type with said second highest connectivitymetric resides and instances related thereto at all levels of relationare loaded into a data block; and Q) repeating processing like step P asmany times as necessary for all entity types in all groups until allinstances of all entity types have been loaded into one or more datablocks.
 7. The process of claim 1 wherein step A comprises: A1) addingdata to relationship tables that record parent-child entityrelationships between entity types in said graph so as to make the graphnon-directed such that the parent entity type of any entity type may bedetermined from information in said relationship table; A2) startingwith any first entity on said non-directed graph, find all otherentities on said graph which are either parent or child to said firstentity and putting all the entities found in a first group along withtheir relationships; A3) proceeding to a parent or child entity typefound in step A2, referred to hereafter as the second entity, findingall entity types which are related to said second entity as eitherparent or child, and adding the entity types so found to said firstgroup along with their relationships; A4) repeating step A3 for everyother parent or child entity of said first entity and putting all foundentities in said first group along with their relationships; A5)proceeding to another entity type node in said graph which is one of theentity types found in steps A3 or A4, which will hereafter be referredto as the third entity, and finding all entity types which are relatedto said third entity as either parent or child, and adding said entitytypes so found to said first group along with their relationships; A6)repeating the steps of selecting an entity node, finding all parent andchild entities types of said selected entity node, and adding the foundentity types to said first group along with their relationships until nofurther new entity types not previously found can be found, anddeclaring said first group completed; and A7) repeating steps A1 throughA6 to create another independent group; and A8) repeating step A7 asmany times as necessary to create as many independent groups as arenecessary to include all entity types on said graph.
 8. The process ofclaim 2 wherein step C comprises adding up the normalized cardinalityfor all incoming and outgoing relationships of an entity to calculatesaid connectivity metric.
 9. A computer-readable medium which bearsinstructions which, when executed by a computer causes said computer tocarry out a process to build self-consistent data blocks for a CMDBsystem or any other external system using a data block maximum size,said process comprising: A) dividing a graph of entity types intoindependent groups, each group including entity types related to otherentity types by parent-child relationships; B) computing the cardinalityof each relationship; C) computing a connectivity metric for each entitytype; D) sorting the entity types into decreasing order of connectivitymetric; E) loading related instances of related entity types into one ormore data blocks so as to not substantially exceed a maximum data sizefor each block starting with the entity type of highest connectivitymetric and working downward on the sorted list of entity types generatedin step D; F) loading into said one or more data blocks any instances ofentity types not related to any other entity types; G) marking eachinstance which has been loaded into a data block as done; and H)repeating steps E, F and G until all instances of all entity types ofall independent groups have been loaded into one or more data blocks.10. The computer-readable medium of claim 9 further bearingcomputer-readable instructions which, when executed, cause a computer tocarry out a further step B1 comprising calculating a weighting ratio foreach parent-child relationship by computing the ratio S2 divided by S1,where S2 is the data size of an instance of the child type entity insaid relationship and S1 is the data size of an instance of the parenttype entity, and further bearing computer-readable instructions which,when executed, cause a computer to carry out a further step B2 ofmultiplying said cardinality of each said relationship by said weightingratio of said relationship so as to generate a normalized cardinalityfor each said relationship before computing said connectivity metric foreach said entity type, and further bearing computer-readableinstructions which, when executed, cause a computer to carry out step Cby computing said connectivity metric for each entity types using saidnormalized cardinality for each relationship of said entity type. 11.The computer-readable medium of claim 9 further bearingcomputer-readable instructions which, when executed, cause a computer tocarry out step E by performing the following steps: I) starting with theindependent group which contains the entity type with the highestconnectivity metric, hereafter referred to as Tmax; J) calculating Ndivided by K where N is the maximum block size expressed as the maximumnumber of entities and K is the number of entities in the group; K) loadN/K instances of entity type Tmax into a data block referred to ascurrentBlock; L) load said currentBlock with all instances related tosaid N/K instances of entity type Tmax at relation distance one fromsaid instances of entity type Tmax loaded in step K; M) for each relatedinstance loaded in step L, determine other related instances of entitytypes at relation distance one from said instances of entity typesloaded in step L; N) load into said current block all instancesdetermined in step M which are related to instances loaded in step L; O)repeat search and loading processing like that of step M and N as manytimes as necessary to load instances related to said instances of entitytype Tmax loaded in step K at each level of relation in said group untilall instances of said group are loaded into said currentBlock.
 12. Thecomputer-readable medium of claim 9 further bearing computer-readableinstructions which, when executed, cause a computer to carry out step Eby performing the following steps: I) starting with the independentgroup which contains the entity type with the highest connectivitymetric calculated using said normalized cardinalities; J) calculating Ndivided by K where N is the maximum block size expressed as the maximumnumber of entities and K is the number of entities in the group; K) loadN/K instances of entity type Tmax into a data block referred to ascurrentBlock; L) load said currentBlock with all instances related tosaid N/K instances of entity type Tmax at relation distance one fromsaid instances of entity type Tmax loaded in step K; M) for each relatedinstance loaded in step L, determine other related instances of entitytypes at relation distance one from said instances of entity typesloaded in step L; N) load into said current block all instancesdetermined in step M which are related to instances loaded in step L; O)repeat search and loading processing like that of step M and N as manytimes as necessary to load instances related to said instances of entitytype Tmax loaded in step K at each level of relation in said group untilall instances of said group are loaded into said currentBlock.
 13. Thecomputer-readable medium of claim 10 further bearing computer-readableinstructions which, when executed, cause a computer to carry out step Eby performing the following steps: I) starting with the independentgroup which contains the entity type with the highest connectivitymetric calculated using said normalized cardinalities; J) calculating Ndivided by K where N is the maximum block size expressed as the maximumnumber of entities and K is the number of entities in the group; K) loadN/K instances of entity type Tmax into a data block referred to ascurrentBlock; L) load said currentBlock with all instances related tosaid N/K instances of entity type Tmax at relation distance one fromsaid instances of entity type Tmax loaded in step K; M) for each relatedinstance loaded in step L, determine other related instances of entitytypes at relation distance one from said instances of entity typesloaded in step L; N) load into said current block all instancesdetermined in step M which are related to instances loaded in step L; O)repeat search and loading processing like that of step M and N as manytimes as necessary to load instances related to said instances of entitytype Tmax loaded in step K at each level of relation in said group untilall instances of said group are loaded into said currentBlock; P)starting with the group in which the entity type with the second highestconnectivity metric resides, repeat steps J through O until allinstances of said entity type with said second highest connectivitymetric resides and instances related thereto at all levels of relationare loaded into a data block; and Q) repeating processing like step P asmany times as necessary for all entity types in all groups until allinstances of all entity types have been loaded into one or more datablocks.
 14. The computer-readable medium of claim 9 further bearingcomputer-readable instructions which, when executed, cause a computer tocarry out step E by performing the following steps: I) starting with theindependent group which contains the entity type with the highestconnectivity metric; J) calculating N divided by K where N is themaximum block size expressed as the maximum number of entities and K isthe number of entities in the group; K) load N/K instances of entitytype Tmax into a data block referred to as currentBlock; L) load saidcurrentBlock with all instances related to said N/K instances of entitytype Tmax at relation distance one from said instances of entity typeTmax loaded in step K; M) for each related instance loaded in step L,determine other related instances of entity types at relation distanceone from said instances of entity types loaded in step L; N) load intosaid current block all instances determined in step M which are relatedto instances loaded in step L; O) repeat search and loading processinglike that of step M and N as many times as necessary to load instancesrelated to said instances of entity type Tmax loaded in step K at eachlevel of relation in said group until all instances of said group areloaded into said currentBlock; P) starting with the group in which theentity type with the second highest connectivity metric resides, repeatsteps J through O until all instances of said entity type with saidsecond highest connectivity metric resides and instances related theretoat all levels of relation are loaded into a data block; and Q) repeatingprocessing like step P as many times as necessary for all entity typesin all groups until all instances of all entity types have been loadedinto one or more data blocks.
 15. The computer-readable medium of claim9 further bearing computer-readable instructions which, when executed,cause a computer to carry out step A by performing the following steps:A1) adding data to relationship tables that record parent-child entityrelationships between entity types in said graph so as to make the graphnon-directed such that the parent entity type of any entity type may bedetermined from information in said relationship table; A2) startingwith any first entity on said non-directed graph, find all otherentities on said graph which are either parent or child to said firstentity and putting all the entities found in a first group along withtheir relationships; A3) proceeding to a parent or child entity typefound in step A2, referred to hereafter as the second entity, findingall entity types which are related to said second entity as eitherparent or child, and adding the entity types so found to said firstgroup along with their relationships; A4) repeating step A3 for everyother parent or child entity of said first entity and putting all foundentities in said first group along with their relationships; A5)proceeding to another entity type node in said graph which is one of theentity types found in steps A3 or A4, which will hereafter be referredto as the third entity, and finding all entity types which are relatedto said third entity as either parent or child, and adding said entitytypes so found to said first group along with their relationships; A6)repeating the steps of selecting an entity node, finding all parent andchild entities types of said selected entity node, and adding the foundentity types to said first group along with their relationships until nofurther new entity types not previously found can be found, anddeclaring said first group completed; and A7) repeating steps A1 throughA6 to create another independent group; and A8) repeating step A7 asmany times as necessary to create as many independent groups as arenecessary to include all entity types on said graph.
 16. Thecomputer-readable medium of claim 10 further bearing computer-readableinstructions which, when executed, cause a computer to carry out step Cby adding up the normalized cardinality for all incoming and outgoingrelationships of an entity to calculate said connectivity metric.
 17. Anapparatus comprising a computer programmed with an operating system andone or more application programs which interact with said computer andsaid operating system so as to control said computer to carry out thefollowing process: A) dividing a graph of entity types into independentgroups, each group including entity types related to other entity typesby parent-child relationships; B) computing the cardinality of eachrelationship; C) computing a connectivity metric for each entity type;D) sorting the entity types into decreasing order of connectivitymetric; E) loading related instances of related entity types into one ormore data blocks so as to not substantially exceed a maximum data sizefor each block starting with the entity type of highest connectivitymetric and working downward on the sorted list of entity types generatedin step D; F) loading into said one or more data blocks any instances ofentity types not related to any other entity types; G) marking eachinstance which has been loaded into a data block as done; and H)repeating steps E, F and G until all instances of all entity types ofall independent groups have been loaded into one or more data blocks.18. An apparatus comprising a computer programmed with an operatingsystem and one or more application programs which interact with saidcomputer and said operating system so as to control said computer tocarry out the following process on a collection of data objects whichcan be represented by a graph of entity types which has been dividedinto independent groups, each group including entity types related toother entity types by parent-child relationships, each entity typerepresenting one or more instances of the entity, each instancerepresented by a data object which, if said instance has any parent orchild relationship, has data recording at least some of itsrelationship(s) with one or more instances of another type, said processcomprising A) computing the cardinality of each relationship; B)computing a connectivity metric for each entity type; C) sorting theentity types into decreasing order of connectivity metric; D) loadingrelated instances of related entity types into one or more data blocksso as to not substantially exceed a maximum data size for each blockstarting with the entity type of highest connectivity metric and workingdownward on the sorted list of entity types generated in step C; E)loading into said one or more data blocks any instances of entity typesnot related to any other entity types; F) marking each instance whichhas been loaded into a data block as done; and G) repeating steps D, Eand F until all instances of all entity types of all independent groupshave been loaded into one or more data blocks.